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;
}
}