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