單例設計模式兩種寫法:
單例用代碼體現
1,將構造函數私有化;
2,在類中創建一個本類對象.
3,提供一個方法可以獲取到本類的對象.//先初始化對象,稱爲:餓漢式(開發用),建立單例時使用
//Single類一進內存,就已經創建好了對象.
class Single{
private Single(){}
private static Single s = new Single();
public static Single getInstance(){
return s;
}
}
//對象時方法被調用時,才初始化,也叫做對象的延時加載.稱爲懶漢式
//Single類進內存,對象還沒有存在,只有調用了getInstance方法時,才建立對象.
class Single{
private Single(){}
private static Single s = null;
public static Single getInstance(){
if(s == null) //優化 if(s == null)
s = new Single(); { synchronized(Single.class){
return s; if(s == null)
} s = new Single();
} }
} return s;}}
因爲JVM在非常多次運行中,可能會出現不判斷s==null,所以更安全的是在函數上加synchronized.
還有一種寫法
class Single{
privateSingle(){}
public static final Single INSTANCE = new Single();//final修飾時,變量的值一設置就不能修改
}