1:饿汉
public class SingletonExample {
private static SingletonExample _instance = new SingletonExample();
public static SingletonExample getInstance() {
return _instance;
}
private SingletonExample() {
}
}
2:懒汉
public class SingletonExample {
private static SingletonExample _instance = null;
public static synchronized SingletonExample getInstance() {
if(_instance == null){
_instance = new SingletonExample();
}
return _instance;
}
private SingletonExample() {
}
}
3:懒汉,不安全
public class SingletonExample {
private static SingletonExample _instance = null;
public static SingletonExample getInstance() {
if(_instance == null){
synchronized (SingletonExample.class){
if(_instance == null){
_instance = new SingletonExample();
}
}
}
return _instance;
}
private SingletonExample() {
}
}
4:懒汉,内部类
public class SingletonExample {
private static class SingletonExampleHolder{
private final static SingletonExample _instance = new SingletonExample();
}
public static SingletonExample getInstance() {
return SingletonExampleHolder._instance;
}
private SingletonExample() {
}
}
5:登记式,可继承
public class SingletonExample {
static private HashMap singletonMap = new HashMap();
static {
SingletonExample x = new SingletonExample();
singletonMap.put(x.getClass().getName(), x);
}
protected SingletonExample() {
}
public static SingletonExample getInstance(String name) {
if (name == null) {
name = "*.*.SingletonExample";
}
if (singletonMap.get(name) == null) {
try {
singletonMap.put(name, Class.forName(name).newInstance());
} catch (ClassNotFoundException cnf) {
System.out.println("Couldn't find class " + name);
} catch (InstantiationException ie) {
System.out.println("Couldn't instantiate an object of type "+ name);
} catch (IllegalAccessException ia) {
System.out.println("Couldn't access class " + name);
}
}
return (SingletonExample) (singletonMap.get(name));
}
}
class SingletonChild extends SingletonExample{
public SingletonChild(){}
public static SingletonChild getInstance(){
return (SingletonChild)SingletonExample.getInstance("*.*.SingletonChild");
}
}