设计模式之单例模式的四种实现

设计模式之单例模式

单例模式(Singleton)保证一个类仅有一个实例,并提供一个访问它的全局访问点。

结构图

常见应用:

日志,驱动,缓存和线程池等。

实现方法:

  1. Eager initialization(饿汉式初始化)
  2. Static block initialization(静态块初始化)
  3. Lazy initialization(懒汉式初始化)
  4. 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类最广泛使用的方法,它不需要同步,且是线程安全的。

经验分享 程序员 微信小程序 职场和发展