Java實現各種類型的單例模式

單例算是最簡單的設計模式了,用途自不用多說,但是寫好單例也是比較考驗一個程序猿功底的,這就是爲什麼很多面試官樂於讓面試者寫一寫單例的原因,正所謂簡約而不簡單。廢話不多說,下面就用java來實現各種各樣的單例吧。
1.餓漢模式

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

2.懶漢模式

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

3.線程安全的單例模式

public class Singleton{
  private static Singleton instance;
  private Singleton(){}
  public static synchronized Singleton getInstance(){
    if(instance == null){
      instance = new Singleton();
      return instance;
    }
    return instance;
  }
}

4.雙檢的線程安全的單例模式

public class Singleton{
  private static Singleton instance;
  private Singleton(){}
  public static Singleton getInstance(){
    if(instance == null){
      synchronized{
        if(instance == null){
          instance = new Singleton();
          return instance;
        }
      }
    }
    return instance;
  }
}

5.最牛逼的線程安全的寫法

public class Singleton{
  private Singleton(){}
  private class SingletonHolder{
    private static Singleton instance = new Singleton();
    public static Singleton getInstance(){
      return instance;
    }
  }
  public static Singleton getInstance(){
    return SingletonHolder.getInstance();
  }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章