设计模式之单例模式的四种实现
设计模式之单例模式
单例模式(Singleton)保证一个类仅有一个实例,并提供一个访问它的全局访问点。
结构图
常见应用:
日志,驱动,缓存和线程池等。
实现方法:
- Eager initialization(饿汉式初始化)
- Static block initialization(静态块初始化)
- Lazy initialization(懒汉式初始化)
- Bill Pugh Singleton Implementation(Bill Pugh单例实现)
实现代码:
1:Eager initialization(饿汉式初始化)
class Eager {
private static final Eager instance = new Eager();
public static Eager getInstance() {
return instance;
}
}
2:Static block initialization(静态块初始化)
class StaticBlock {
private static StaticBlock instance;
static {
instance = new StaticBlock();
}
public static StaticBlock getInstance() {
return instance;
}
}
3:Lazy initialization(懒汉式初始化)
class LazySingleton {
private static LazySingleton instance;
public static LazySingleton getInstance() {
if (instance == null) {
synchronized (LazySingleton.class) {
if (instance == null) {
instance = new LazySingleton();
}
}
}
return instance;
}
}
4:Bill Pugh Singleton Implementation(Bill Pugh单例实现)
class BillPughSingleton {
private BillPughSingleton() {
}
private static class SingletonHolder {
private static final BillPughSingleton INSTANCE = new BillPughSingleton();
}
public static BillPughSingleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
以上四种单例模式的实现,Bill Pugh实现了一个适合所有版本的JVM、性能良好且线程安全的单例。当单例类被加载时,SingletonHolder类没有被加载到内存,仅当程序调用了getInstance方法时,这个私有类才会有加载并创建单例类的实例。
Bill Pugh单例是Singleton类最广泛使用的方法,它不需要同步,且是线程安全的。
