功能:
保證一個類僅有一個實例,并且自行實例化,提供一個訪問它的全局訪問點。
適用性:
1.當類只能有一個實例而且客戶可以從一個眾所周知的訪問點訪問它時。
2.當這個唯一實例應該是通過子類化可擴展的,并且客戶應該無需更改代碼就能使用一個擴展的實例時。
描述:
把構造方法聲明為private,確保只能由自己創建,避免外部創建實例或者被子類繼承從而創建額外實例。定義一個私有靜態的該類的實例作為該類的數據域,確保一個類只有一個實例。定義一個靜態工廠方法,外部類不能實例化一個該類的對象,所有只能用static的方法,提供給其他類調用返回此單例類的唯一實例。
例子:
public class Singleton {
private static Singleton sing;
private Singleton() {
}
public static Singleton getInstance() {
if (sing == null) {
sing = new Singleton();
}
return sing;
}
}
Test :
public class Test {
public static void main(String[] args) {
Singleton sing1 = Singleton.getInstance();
Singleton sing2 = Singleton.getInstance();
System.out.println(sing1);
System.out.println(sing2);
}
}
Result:
singleton.Singleton@1d78d47
singleton.Singleton@1d78d47