设计模式之单例模式的四种实现
设计模式之单例模式
单例模式(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类最广泛使用的方法,它不需要同步,且是线程安全的。