单态模式
保证一个类仅有一个实例,且提供一个访问它的全局访问点。
适用性
1.当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
2.当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。参与者
Singleton
定义一个Instance操作,允许客户访问它的唯一实例。Instance是一个类操作。可能负责创建它自己的唯一实例。例子
Singleton
public class Singleton {
private static Singleton instance ;private Singleton() {}public static Singleton getInstance() {
if (instance== null) {
instance= new Singleton();
}
return instance;
}
}public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
if (instance == null)
instance=new Singleton();
return instance;
}
}
public class Singleton {
private static volatile Singletoninstance instance = null;
public static Singleton getInstance() {
if (instance== null) (jdk1.5+)
synchronized(Singleton.class)
if (instance == null)
instance = new Singleton();
return instance;
}
}
public class Singleton {
private static class Holder {
static final Singleton instance = newSingleton();
}
public static SingletongetInstance() {
return Holder.instance;
}
}