singleton 的幾種寫法

singleton 一般是我們學習設計模式時接觸的第一種模式,也是比較常用的一種模式

目前爲止,有如下三種正確的寫法

今天回過頭來看了一下,發現1和3少了私有構造器,現在修改了一下加上了

第一種

 public class Singleton {

static Singleton instance;

  private Singleton()
  {
    }

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

}

這種寫發的問題是併發引起的效率問題,因爲實際上只有在第一次初始化的時候在真正需要鎖

第二種,也是比較常見的方法

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

  private Singleton()
  {
    }

  public static Singleton getInstance()
  {
    return instance;
  }
}

但這種方法不是 lazy loading的

第三種,一種創新性的寫法,並解決了 lazy loading的問題

public class Singleton {

 private Singleton()
  {
    }

  static class SingletonHolder {

     static Singleton instance = new Singleton();
  }

  public static Singleton getInstance() {
    return SingletonHolder.instance;
  }

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章