學習單例模式

1、單例模式是怎樣產生的?

      當想要讓一個定義類只能實例化一個對象,則不能對外提供public的構造方法,而是要把構造方法定義爲private的,這樣就可以讓定義類自己控制類的實例化。同時,也要對外提供一個public的方法,用來得到定義類的實例。當然,在定義類的內部需要初始化來創建自身的一個實例(保證這個實例必須是唯一的)。

2、單例模式中,需要做哪些工作?

      由1所述的來一步一步分析:在一個類(Singleton)中,首先保證構造方法是private的,private Singleton(){};

其次,通過初始化來創建實例,在類中聲明一個靜態的引用(這個靜態引用只在類加載的時候初始化一次),private static Singleton singleton= null; ,然後通過一個靜態代碼塊來得到一個唯一的實例(如果引用singleton爲null就創建一個實例,如果不是null,則不做任何處理,也就是沿用已經存在的實例),

static {
      if(singleton == null) {
            singleton = new Singleton();
      }
}
;

再次,我們就要對外提供一個方法來訪問類的唯一實例(這個方法必須是靜態的,否則外部沒法訪問這個方法),

public static Singleton getInstance() {
      return singleton;
}
這樣就完成了單例模式的工作。

3、根據以上兩點,總結運用單例模式的步驟。

      一、私有構造方法;

      二、聲明一個靜態的,私有的引用;

      三、靜態初始化一個實例,保證這個實例唯一;

      四、對外提供靜態方法,用以訪問唯一實例。

代碼表現如下:

public class Singleton {

      private Singleton(){};  //第一步

      private static Singleton singleton= null;  //第二步

      static {                      //第三步
            if(singleton == null) {
                  singleton = new Singleton();
            }
      }

      public static Singleton getInstance() {  //第四步
            return singleton;
      }

}

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