【设计模式】单例模式的实现

2020-01-15  本文已影响0人  胖三斤66

节选自:Java实现单例模式(懒汉式、饿汉式、双重检验锁、静态内部类方式、枚举方式)_常今-CSDN博客

方法一:饿汉模式

优点:简单且安全,原理跟 String 一样不可变。

public class Singleton{
  private final static Singleton instance = new Singleton();
  private Singleton(){}
  public static Singleton getInstance(){
    return instance;
  }
}

方法二:懒汉模式

优点:只有使用的时候才初始化
缺点:注意事项很多

public class Singleton{
  private static Singleton instance;
  private Singleton(){}

  // 线程不安全,不推荐
  public static Singleton getInstanceA(){
    if (instance == null)
      instance = new Singleton();
    return instance;
  }
  
  // 效率低,不推荐
  public synchronized static Singleton getInstanceB(){
    if (instance == null)
      instance = new Singleton();
    return instance;
  }

  // 完全正确的,推荐
  public static Singleton getInstanceC(){
    if (instance == null)
      synchronized(Singleton.class){
        if (instance == null)
          instance = new Singleton();
      }
    return instance;
  }
}

方法三:静态内部类

优点:

public class Singleton{
  private Singleton(){}
  public static getInstance(){
    return InnerSingleton.instance;
  }
  
  private static class InnerSingleton{
    private final static Singleton instance = new Singleton();
  }
}

方法四:枚举

特点:直接利用枚举的单例和线程安全的特征。

enum Single{
  SINGLE;
  private Single(){}
}

public class Singleton{
  public static void main(String[] args){
    Single s = Single.SINGLE;
  }
}
上一篇 下一篇

猜你喜欢

热点阅读