定義:
確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。
單例模式的通用類圖如下:
**如下:
public class singleton
public static singleton getinstance()
public void dosomething()
}
這裡需要注意幾個地方:
1、要定義乙個私有的靜態的成員變數,並且在宣告變數的時候就直接進行初始化,這樣做是為了防止多執行緒操作而有可能出現的產生多個例項情況。
2、建構函式要定義成私有的,以限制產生多個物件。
3、要有乙個靜態的返回例項化後的成員變數的函式getinstance(),並且是公開的靜態的,由類名進行呼叫。
單例模式的優點:
1、因為只有乙個例項存在記憶體中,減少了記憶體的開支,特別是乙個物件需要頻繁的建立、銷毀時,而且建立或銷毀時效能又無法優化,單例模式的優勢就非常明顯。
2、單例模式可以避免對資源的多重占用。
單例模式的缺點:
1、因為單例模式它要求「自行例項化」,所以一般沒有介面,擴充套件很困難。
2、單例模式對測試是不利的,因為它沒有介面,不能通過mock等方式虛擬乙個物件。
單例模式的擴充套件:
如果要求乙個類只產生兩三個物件,該怎麼辦呢?來看一下類圖:
**如下:
public class mutisingleton
//產生所有的例項
static{
for(int i=0;i
設計模式學習筆記(單例模式)
保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式是對全域性變數的一種改進。全域性變數空間利用率比較低,且在專案中是乙個不安全隱患,特別是在多執行緒程式中,會有很多的不可 性 同時,使用全域性變數,也不符合物件導向的封裝原則。1 基礎版本 include using namespace...
設計模式 單例模式(學習筆記)
經典單例模式原理 1 單例模式 確保乙個類最多只有乙個例項,並提供乙個全域性訪問點 2 單例模式的意義 有些物件我們只需要乙個 執行緒池,快取,硬體設別等。如果多個例項會造成衝突 結果的不一致性等問題。使用靜態不變數方式來實現,或者使用全域性變數。3 單例模式類圖 經典單例模式存在的問題 改進方案 ...
設計模式學習筆記 單例模式
單例模式 保證乙個類有且只有乙個例項,並提供乙個訪問該例項的全域性訪問點。要提供乙個全域性訪問點,最常用的辦法便是使用類的靜態方法,靜態方法只能從類而不是從例項中呼叫。從理解上還是比較方便理解的,特別在想象了單例模式的實際應用情況後,當乙個物件在系統中獨一無二,只能有乙個的時候,比如乙個列印裝置,乙...