java设计模式之创建模式--singleton (demo)

--------------------------------------------------------------------
SingletonA.java
--------------------------------------------------------------------

package createpattern;

/**
 * Email: meconsea@hotmail.com
 * <p>Title: </p>
 * <p>Description: a singleton  we can only create one instance </p>
 * <p>Copyright: Copyright (c) 2005</p>
 * <p>Company: </p>
 * @author meconsea
 * @version 1.0
 */

public class SingletonA {

  public static  boolean instanceFlag = false;

  private int i = 0;

  /**
   * set constructor private and do nothing
   * can not a new instance outside class
   */
  private  SingletonA() {
  }

  public static SingletonA instance = null;

  public int getNum () {
      return this.i;
  }

  public void setNum (int i){
     this.i = i;
  }

  public static SingletonA getInstance(){
      if(!instanceFlag){
          instanceFlag = true;
          instance =  new SingletonA();
      }
      instance.setNum(instance.getNum()+1);
      return instance;
  }

  public void finalize() {
     instanceFlag = false;
  }

}

----------------------------------------------------------------------------------
TestA.java
----------------------------------------------------------------------------------

package createpattern;

/**
 * Email: meconsea@hotmail.com
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2005</p>
 * <p>Company: </p>
 * @author meconsea
 * @version 1.0
 */

public class TestA {
  public static void main (String args[]){

      SingletonA singletonA = SingletonA.getInstance();
      int i = singletonA.getNum();
      System.out.println("i == "+i);

      SingletonA singletonA2 = SingletonA.getInstance();
      int ii = singletonA2.getNum();
      System.out.println("ii == "+ii);
  }
}

------------------------------------------------------------------
SingletonB.java
------------------------------------------------------------------
package createpattern;
/**
 * Email: meconsea@hotmail.com
 * <p>Title: </p>
 * <p>Description: A new Singleton use registry </p>
 * <p>Copyright: Copyright (c) 2005</p>
 * <p>Company: </p>
 * @author meconsea
 * @version 1.0
 */
import java.util.HashMap;

public class SingletonB {

  static private HashMap registryMap = new HashMap();

  public static void registry(String name, SingletonB aInstance){
      registryMap.put(name,aInstance);
  }

  public static SingletonB getInstance (String name){
      return lookUp(name);
  }

  protected static SingletonB lookUp (String name){
       return (SingletonB)registryMap.get(name);
  }
}

-------------------------------------------------------------------
SingletonException.java
-------------------------------------------------------------------
package createpattern;

/**
 * Email: meconsea@hotmail.com
 * <p>Title: </p>
 * <p>Description:A user defined Exception </p>
 * <p>Copyright: Copyright (c) 2005</p>
 * <p>Company: </p>
 * @author meconsea
 * @version 1.0
 */

public class SingletonException extends RuntimeException{
  public SingletonException() {
      super();
  }

  public SingletonException (String s){
      super(s);
  }

}

---------------------------------------------------------------
SubSingletonB.java
---------------------------------------------------------------
package createpattern;

/**
 * Email: meconsea@hotmail.com
 * <p>Title: </p>
 * <p>Description: A real Singleton we want to have </p>
 * <p>Copyright: Copyright (c) 2005</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 1.0
 */

public class SubSingletonB extends SingletonB{

  //true if 1 instance

  public static boolean instanceFlag = false;

  public SubSingletonB()throws SingletonException {
    if(instanceFlag){
      throw new SingletonException(" Only can create a instance ");
    } else {
      instanceFlag = true;
      super.registry("sub",this);
    }
  }

  //finalize
  public void finalize(){
    instanceFlag = false;
  }

}

------------------------------------------------------------------
TestB.java
------------------------------------------------------------------
package createpattern;

/**
 * Email: meconsea@hotmail.com
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2005</p>
 * <p>Company: </p>
 * @author meconsea
 * @version 1.0
 */

public class TestB {
  public TestB() {
  }

  public static void main (String args[]){
      /**
       * First we get a instance from SingletonB
       */
      SingletonB instance1 = SingletonB.getInstance("sub");
      if(instance1 == null){
          System.out.println(" There is no such instance in registry! ");
      } else {
          System.out.println(" "+instance1.getClass());
      }

      /**
       * Then we register a new instance
       */
      try {
          SingletonB instance2 = new SubSingletonB();
          System.out.println(" We had created a new instance name /"sub/" now. ");
      }catch (SingletonException se){
          System.out.println(" when create SingletonB occur the  exception "+se.getMessage());
      }

      /**
       * To get instance again
       */
      instance1 = SingletonB.getInstance("sub");
      if(instance1 == null){
          System.out.println(" There is no such instance in registry! ");
      } else {
          System.out.println(" "+instance1.getClass());
      }

      /**
       * Finally we create a new instance again
       */
      try{
          SingletonB instance3 = new SubSingletonB();
          System.out.println(" We had create a new instance name /"sub/" now. ");
      }catch (SingletonException se){
          System.out.println(""+se.getMessage());
      }
    }
}
-------------------------------------------
end
-------------------------------------------

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值