Java 設計模式——單例模式
一、單例模式有以下三個特點
1)單例類在整個系統中只能有一個實例
2)單例類必須自己創建自己的實例
3)單例類必須系統中其他對象提供這個實例
二、單例模式兩種類型
(1)餓漢式
先初始化對象;
類一加載就存在;
Single 類一進內存,就已經創建好對象。
(2)懶漢式
對象是方法被調用時才初始化,也叫做對象的延時加載;
類一加載就爲 null(調用方法的時候纔在內存中建立對象);
Single類進內存,對象還沒有存在,只有調用方法時才建立對象。
單例模式的好處就是:類只實例化一次,省資源,節省開銷,提高速度
三、單例模式具體實現
(1)餓漢式,在類被加載時,靜態變量m_instance會被初始化,此時類的私有構造子會被調用。
SingletonOne.java
packagedesignpattern.singleton;
public class SingletonOne {
//Create instance when the class load.
private static final SingletonOnem_instance = new SingletonOne();
//此處寫成私有方法可以防止用戶在外面用new方法來產生。
private SingletonOne(){}
public synchronized static SingletonOne getInstance(){
return m_instance;
}
}
(2)懶漢式,在下面給出懶漢式單例類實現裏對靜態工廠方法使用了同步化,以處理多線程環境
SingletonTwo.java
packagedesignpattern.singleton;
public class SingletonTwo {
private static SingletonTwo m_getInstance = null;
//此處寫成私有方法可以防止用戶在外面用new方法來產生。
private SingletonTwo(){
}
//synchronized可以保證線程安全
public synchronized staticSingletonTwo getInstance(){
//When invoke theinstance then create instance.
if (m_getInstance ==null){
m_getInstance= new SingletonTwo();
}
returnm_getInstance;
}
}