C#設計模式之單例模式
單例模式
英文:SingLeton
what:
保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點。
通常我們可以讓一個全域性變數使得一個物件被訪問,但它不能防止你例項化多個物件,一個最好的辦法就是,讓類自身負責儲存它的唯一例項,這個類可以保證沒有其他例項可以被建立,並且它可以提供一個訪問該例項的方法。
好處:
- 保證唯一的例項
- 嚴格控制客戶怎樣訪問它以及何時訪問它。對唯一例項的受控訪問。
多執行緒時的單例
注意
多執行緒程式中同時訪問Singleton類,呼叫GetInstance()方法,會有可能造成建立多個例項。這時候可以給程式(什麼是執行緒?執行緒與程式的區別是什麼?)一把鎖來處理。Lock確保當一個執行緒位於程式碼的臨界區時,另一個執行緒不進入臨界區。如果其他執行緒試圖進入鎖定的程式碼,則它將一直等待(被阻止),直到該物件被釋放。
雙重鎖定
Double-Check Locking
why:
運用鎖定方式,每次呼叫都會需要lock,影響效能,所以就有了雙重鎖定
先判斷例項是否存在,不存在再加鎖處理
餓漢式單例類
靜態初始化的方式是在自己被載入時就將自己例項化
懶漢式單例類
在第一次被引用時,才會將自己例項化
後記
突然發現的一篇草稿,未完後續更新。。。
相關文章
- C#設計模式——單例模式C#設計模式單例
- 設計模式之☞單例模式設計模式單例
- 設計模式之單例模式設計模式單例
- 設計模式之---單例模式設計模式單例
- C#設計模式(1)=>單例模式C#設計模式單例
- C#設計模式(1)——單例模式C#設計模式單例
- 設計模式之單例設計模式設計模式單例
- PHP 設計模式之單例模式PHP設計模式單例
- Javascript 設計模式之單例模式JavaScript設計模式單例
- Javascript設計模式之單例模式JavaScript設計模式單例
- js設計模式之單例模式JS設計模式單例
- PHP 設計模式之——單例模式PHP設計模式單例
- 01 設計模式之單例模式設計模式單例
- 設計模式(一)之單例模式設計模式單例
- golang設計模式之單例模式Golang設計模式單例
- PHP設計模式之單例模式PHP設計模式單例
- Java設計模式之單例模式Java設計模式單例
- php模式設計之 單例模式PHP模式單例
- PHP設計模式之:單例模式PHP設計模式單例
- iOS 設計模式之單例模式iOS設計模式單例
- 設計模式之單例設計模式單例
- Java設計模式系列之單例設計模式Java設計模式單例
- Android設計模式之單例模式Android設計模式單例
- 理解設計模式之單例模式(Javascript)設計模式單例JavaScript
- 設計模式之單例模式詳解設計模式單例
- 設計模式學習之單例模式設計模式單例
- 設計模式之單例模式 - Singleton設計模式單例
- 《JAVA與設計模式》之單例模式Java設計模式單例
- 23種設計模式之單例模式設計模式單例
- 我學設計模式 之 單例模式設計模式單例
- [設計模式]單例設計模式設計模式單例
- 設計模式-單例模式設計模式單例
- [設計模式] 單例模式設計模式單例
- 設計模式 —— 單例模式設計模式單例
- 設計模式(單例模式)設計模式單例
- 設計模式——單例模式設計模式單例
- 設計模式--單例模式設計模式單例
- 設計模式 單例模式設計模式單例