保证一个类仅有一个实例,并提供一个访问它的全局访问点。可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象,一个最好的方法就是,让类自己负责保存自己的唯一实例,这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。
//饿汉式
class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return instance;
}
}
//懒汉式1
class Singleton2 {
private static Singleton2 instance;
private Singleton2() {
}
public static synchronized Singleton2 getInstance() {
if (instance == null) {
instance = new Singleton2();
}
return instance;
}
}
//懒加载2:double-checked locking
class Singleton3 {
private volatile static Singleton3 instance;
private Singleton3() {
}
public static Singleton3 getInstance() {
if (instance == null) {
synchronized (Singleton3.class) {
if (instance == null) {
instance = new Singleton3();
}
}
}
return instance;
}
}
//登记式/静态内部类
class Singleton4 {
private static class Singleton4Holder {
private static final Singleton4 INSTANCE = new Singleton4();
}
private Singleton4() {
}
public static Singleton4 getInstance() {
return Singleton4Holder.INSTANCE;
}
}
//枚举
enum Singleton5 {
INSTANCE;
public void whateverMethod() {
}
}
参考:
[1] 菜鸟教程
[2] 大话设计模式



