常見設計模式 單例模式 C

2021-10-11 03:09:31 字數 1487 閱讀 7872

單例模式(singleton pattern)是最簡單的設計模式之一。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。

這種模式涉及到乙個單一的類,該類負責建立自己的物件,同時確保只有單個物件被建立。這個類提供了一種訪問其唯一的物件的方式,可以直接訪問,不需要例項化該類的物件。

注意:1、單例類只能有乙個例項。

2、單例類必須自己建立自己的唯一例項。

3、單例類必須給所有其他物件提供這一例項。

應用場景

單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。在計算機系統中,任務管理器、執行緒池、快取、日誌物件、對話方塊、印表機、顯示卡的驅動程式物件常被設計成單例。在專案當中,系統啟動讀取配置檔案就需要單例保證配置的一致性。

懶漢

故名思義,不到萬不得已就不會去例項化類,也就是說在第一次用到類例項的時候才會去例項化

在訪問量較小時,採用懶漢實現。這是以時間換空間。

經典懶漢

class

singleton

;static singleton * instance;

public

:static singleton *

getinstance()

return instance;}}

;singleton * singleton::instance =

null

;

懶漢模式下,在定義instance變數時先等於null,在呼叫getinstance()方法時,再判斷是否要賦值。這種模式,並非是執行緒安全的,因為多個執行緒同時呼叫getinstance()方法,就可能導致有產生多個例項。要實現執行緒安全,就必須加鎖。

class

singleton

;static singleton * instance;

public

:static singleton *

getinstance()

unlock()

;}return instance;}}

;singleton * singleton::instance =

null

;

餓漢

執行緒安全:還未使用變數時,已經對instance進行賦值,就像很飢餓的感覺。在多執行緒環境下肯定是執行緒安全的,因為不存在多執行緒例項化的問題。

餓了肯定要飢不擇食,所以在單例類定義的時候就進行例項化。

由於要進行執行緒同步,所以在訪問量比較大,或者可能訪問的執行緒比較多時,採用餓漢實現,可以實現更好的效能。這是以空間換時間。

class

singleton

;public

:static singleton *

getinstance()

};

常見設計模式之單例設計模式

設計模式經典gof定義的單例模式需要滿足以下兩個條件 1 保證乙個類只建立乙個例項。2 提供對該例項的全域性訪問點。如果系統有類似的實體 有且只有乙個,且需要全域性訪問 那麼就可以將其實現為乙個單例。單例模式的優點 1 在記憶體中只有乙個物件,節省記憶體空間 2 避免頻繁的建立銷毀物件,可以提高效能...

常見設計模式之 單例模式

遇到類似的問題 生產編號的產生,售票系統等資料需要同步,馬上想到單例模式.例子 package singleton description 單例模式 author potter date 2012 8 14 下午10 08 16 version v1.0 public static void mai...

python常見設計模式 單例模式

單例就是單個例項,保證所建立的類進行例項化的時候,每次建立的例項都是同乙個,確保在記憶體中只有乙個物件。當建立某個物件需要很大的記憶體空間的時候可以考慮單例模式,或者一些資源操作等導致效能或者損耗。class danlilei instance none def new cls,args,kwarg...