單例模式總結

單例模式確保某一個類只有一個實例,而且自行實例化並向整個系統提供這個實例。

一.單例模式的結構

1.單例模式的特點:

1.單例類只能有一個實例。

2.單例類必須自己創建自己的唯一的實例。

3.單例類必須給所有其他對象提供這一實例。

2.餓漢式單例類

<code>public class EagerSingleton {
private static final EagerSingleton m_instance = new EagerSingleton();

/**
* 私有的默認構造子
*/
private EagerSingleton(){};

/**
* 靜態工廠方法
* @return
*/
public static EagerSingleton getInstance(){
return m_instance;
}
}/<code>

3.懶漢式單例類

<code>public class LazySingleton {
private static LazySingleton m_instance = null;

/**
* 私有的默認構造子,保證外界無法直接實例化
*/
private LazySingleton(){};

/**
* 靜態工廠方法,返還此類的唯一實例
* @return
*/
synchronized public static LazySingleton getInstance(){
if(m_instance == null){
m_instance = new LazySingleton();
}
return m_instance;
}
}/<code>

注意:

1.與餓漢式單例類不同的是:餓漢式單例類第一次被引用時將自己實例化。

2.在上面給出懶漢式單例類實現裡對靜態工廠方法使用了同步化,以處理多線程環境。

二.在什麼情況下使用單例模式

使用單例模式有一個必要條件:在一個系統要求一個類只有一個實例時才應當使用單例模式。

三.單例類的狀態

1.有狀態的單例類

一個單例類可以是有狀態的,一個有狀態的單例對象一般也是可變單例對象。

有狀態的可變單例對象常常當做狀態使用。比如一個單例對象可以持有一個int類型的屬性,用來給一個系統提供一個數值唯一的序列號碼,作為某個販賣系統的賬單號碼。

2.沒有狀態的單例類

單例類也可以是沒有狀態的,僅用作提供工具性函數的對象。


單例模式總結


分享到:


相關文章: