HeadFirst設計模式讀書筆記 5 單例模式

2022-02-22 06:01:35 字數 2381 閱讀 7149

單例模式:確保乙個類只有乙個例項,並提供乙個全域性訪問點。

應用場景:資料庫連線、執行緒池、快取、對話方塊、處理偏好設定、登錄檔的物件、日誌物件、充當印表機、顯示卡等裝置的驅動程式物件、任務管理器、**的計數器、web應用的配置物件的讀取、作業系統的檔案系統。

幾種實現方法**:

(1)簡單的實現(惰性例項化)

public

sealed

class

singleton

private

static singleton instance = null

;

public

static

singleton instance

return

instance;}}

}

簡單實現對於執行緒來說是不安全的,因為在多執行緒的情況下,有可能產生多個singleton例項。多執行緒的情況下,如果多個執行緒都去判斷(instance == null),而它們都還沒有建立例項的情況下,就會產生多個singleton例項。對於簡單實現來講,singleton例項化並不是應用程式啟動就建立,所以我們把它叫做「惰性例項化」,這能避免應用程式啟動時例項化不必要的例項。

(2)執行緒安全的實現

public

sealed

class

singleton

private

static singleton instance = null

;

private

static

readonly

object padlock = new

object

();

public

static

singleton instance

return

instance;}}

}}

安全的執行緒,這是對簡單例項的補充。因為提供了加鎖lock()的操作,這就能確保只有乙個執行緒進入。但是加鎖需要增加額外的開銷,損失效能。

(3)雙重鎖定檢查

public

sealed

class

singleton

private

static singleton instance = null

;

private

static

readonly

object padlock = new

object

();

public

static

singleton instance}}

return

instance;}}

}

雙重鎖定檢查安全的執行緒上面又進行了改進,主要是考慮了每次加鎖會增加額外的開銷,影響效能。所以在加鎖前再判斷singleton有沒有被例項化。這樣,它就能減少很多的額外開銷且是執行緒安全的。實際上,應用程式很少需要上面方式的實現。這種方式仍然有很多缺點:無法實現延遲初始化。大多數情況下我們會使用靜態初始化的方式。

(4)靜態初始化

public

sealed

class

singleton

public

static

singleton instance

}}

靜態初始化,是在 .net 中實現 singleton 的首選方法。

(5)延遲初始化

public

sealed

class

singleton

public

static

singleton instance}}

public

sealed

class

delay

public

static

singleton delayinstance

}}

把例項化的工作交給delay類開實現,這樣singleton類就實現了延遲初始化。這種方式具有很多的優勢,是值得推薦的一種實現方式。但是這種方式就需要開發人員記住不能使用new關鍵字例項化singleton。

Head First 設計模式讀書心得 一

head first 設計模式這本書,從思維認知的角度將原本難以理解和記識的設計模式將得通俗易懂。雲認知 有關思考的思考 如何你想掌握一些知識,學習前要不短的暗示自己,讓你的大腦知道 你學習的這些新的知識很重要 或許你正在為一家你嚮往已經的公司的面試準備寫知識,你將要學習的這些知識對你通過面試至關重...

head first設計模式讀書記錄

設計原則 1 針對介面程式設計而非針對實現 2 多用組合,少用繼承 3 復用的潛力 4 封裝變化 5 開閉原則 對擴充套件開放,對修改關閉 6 依賴倒置原則 7 越常用,越不應修改,把可能的修改扔給必須要改的部分,最好扔給擴充套件。封裝變化 8 最少知識原則 減少類與類的重合,只與密友交流 9 越懶...

《Head First 設計模式》讀書筆記

策略模式 定義演算法族,分別封裝起來,讓他們之間可以互相替換,此模式讓演算法的變化獨立於使用演算法的客戶。oo原則 封裝變化 多用組合,少用繼承 針對介面程式設計,不針對實現程式設計 oo基礎 抽象封裝 多型繼承 觀察者模式 在物件之間定義一對多的依賴,這樣一來,當乙個物件改變狀態,依賴它的物件都會...