C#設計模式之單例模式

提高班14期郭倩_Ulrica發表於2018-08-12

單例模式

英文:SingLeton
what:
保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點。

通常我們可以讓一個全域性變數使得一個物件被訪問,但它不能防止你例項化多個物件,一個最好的辦法就是,讓類自身負責儲存它的唯一例項,這個類可以保證沒有其他例項可以被建立,並且它可以提供一個訪問該例項的方法。

好處:

  1. 保證唯一的例項
  2. 嚴格控制客戶怎樣訪問它以及何時訪問它。對唯一例項的受控訪問。

多執行緒時的單例

注意

多執行緒程式中同時訪問Singleton類,呼叫GetInstance()方法,會有可能造成建立多個例項。這時候可以給程式(什麼是執行緒?執行緒與程式的區別是什麼?)一把鎖來處理。Lock確保當一個執行緒位於程式碼的臨界區時,另一個執行緒不進入臨界區。如果其他執行緒試圖進入鎖定的程式碼,則它將一直等待(被阻止),直到該物件被釋放。

雙重鎖定

Double-Check Locking

why:
運用鎖定方式,每次呼叫都會需要lock,影響效能,所以就有了雙重鎖定
先判斷例項是否存在,不存在再加鎖處理

餓漢式單例類

靜態初始化的方式是在自己被載入時就將自己例項化

懶漢式單例類

在第一次被引用時,才會將自己例項化

後記

突然發現的一篇草稿,未完後續更新。。。

相關文章