--------------------------------------------------------------------
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
-------------------------------------------