Java設計(ji)模(mo)式之單例模(mo)式
時間:2014-09-02 來源:未知(zhi)
功能:
保(bao)證一(yi)個(ge)類僅有一(yi)個(ge)實例,并(bing)且自(zi)行實例化,提供一(yi)個(ge)訪(fang)問它(ta)的全局訪(fang)問點。
適用性:
1.當類只能有(you)一個實例而且客戶可(ke)以從(cong)一個眾所周(zhou)知的訪(fang)問(wen)點(dian)訪(fang)問(wen)它(ta)時。
2.當這個唯(wei)一實例應該是(shi)通(tong)過子類(lei)化可擴展的(de),并(bing)且客戶應該無需更改代(dai)碼就能(neng)使(shi)用一個擴展的(de)實例時(shi)。
描述:
把構(gou)造方法(fa)(fa)聲明為private,確保(bao)只(zhi)能由自己創(chuang)建(jian)(jian)(jian),避(bi)免外部創(chuang)建(jian)(jian)(jian)實(shi)(shi)例(li)(li)(li)(li)或者被子類(lei)(lei)(lei)(lei)繼承(cheng)從而創(chuang)建(jian)(jian)(jian)額外實(shi)(shi)例(li)(li)(li)(li)。定義一(yi)個(ge)(ge)私(si)有靜態的(de)該類(lei)(lei)(lei)(lei)的(de)實(shi)(shi)例(li)(li)(li)(li)作(zuo)為該類(lei)(lei)(lei)(lei)的(de)數據域,確保(bao)一(yi)個(ge)(ge)類(lei)(lei)(lei)(lei)只(zhi)有一(yi)個(ge)(ge)實(shi)(shi)例(li)(li)(li)(li)。定義一(yi)個(ge)(ge)靜態工廠方法(fa)(fa),外部類(lei)(lei)(lei)(lei)不(bu)能實(shi)(shi)例(li)(li)(li)(li)化一(yi)個(ge)(ge)該類(lei)(lei)(lei)(lei)的(de)對象,所有只(zhi)能用static的(de)方法(fa)(fa),提(ti)供給其他類(lei)(lei)(lei)(lei)調用返回此單例(li)(li)(li)(li)類(lei)(lei)(lei)(lei)的(de)唯一(yi)實(shi)(shi)例(li)(li)(li)(li)。
例子:
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

