標籤:
設計模式:
解決某一類問題最行之有效方法,Java中23種設計模式。
單例設計模式(Singleton):解決一個類在記憶體中只存在一個對象
比如對於多個程式使用同一個配置資訊對象時,就需要保證該對象的唯一性。
想要保證對象唯一:
為了避免其他程式過多建立該類對象,先禁止其他程式建立該類對象;
還為了讓其他程式可以訪問到該類對象,只好在本類中自訂一個對象;
為了方便其他程式對自訂對象的訪問, 可以對外提供一些訪問方式;
單例設計模式之餓漢式
Single類一進記憶體,就已經建立好了對象,簡單的說就是一上來就吃。
思路:
將建構函式私人化;
在類中建立一個本類對象;
提供一個公用的存取方法,可以擷取到該類對象;
步驟:
//將建構函式私人化
private Single(){}
//在類中建立一個本類對象(final關鍵字等下有學到,是最終的意思,呵呵)
private finla static Single single =new Single();
//提供一個公用的存取方法,可以擷取到該類對象
public static Single getInstance(){
return single;
}
單例設計模式之懶漢式
對象是方法被調用時才初始化,也叫對象的延時載入
Single類進記憶體,對象還沒有存在,只有調用了getInstance方法時,才建立對象。
步驟:
private Single(){}
private static Single single =null;
public static Single getInstance(){
if(single==null){
synchronized(Single.class){
if(single==null)
single =new Single();
}
}
return single;
}
為什麼有餓漢式還會有懶漢式?
原因就是對了面試,因為面試都是考懶漢式,因為要考慮到了多安全執行緒問題,使程式更加嚴謹。
實際開發中用餓漢式,因為在考慮多線程時會比較安全,懶漢式的解決安全問題的方法,雙重判斷,加入鎖。
總結:
餓漢式:一上來就對對象初始化。
浪費一點點記憶體,因為不調用也執行嘛。
懶漢式:對象調用方法時,才初始化,也叫做對象的延時載入。
一點點記憶體都省,因為只有調用才占記憶體嘛。
Java設計模式之單例設計模式