《大話設計模式》 筆記 單例模式

2021-04-30 08:54:02 字數 684 閱讀 9997

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

其它優點:單例模式因為是卦裝的它的唯一例項,這樣它可以嚴格地控制客戶怎樣訪問它以及何時訪問它。

簡單的說就是對唯一例項的受控訪問。

呼叫:

以上方式存在不足。

在多執行緒的程式中,多個執行緒同時訪問單例類,呼叫getinstance()方法,會有可能造成建立多個例項

在這種情況下,給進行加一把鎖來處理。(lock)

多執行緒時的單例

現對以上singleton類進行改良

lock是確保當乙個執行緒位於**的臨界區時,另乙個執行緒不進入臨界區。如果其他執行緒試圖進入鎖定**,

則它將一直等,直到物件被釋放。

synsingleton類中使用的執行緒lock是能達到目的,但對效能有影響。

可以採用雙重鎖定來改良一下。

如下: 注:

實際應用當中,c#與公共語言執行庫也提供了一種「靜態初始化」方法,這種方法不需要開發人員顯示的編寫執行緒安全**

即可解訣多執行緒環境下它是不安全的問題

例如://關鍵字sealed 阻步派生,以免發生多個例項

public sealed class singleton   

public static singleton getinstance() }

以上這種方式也被稱為懶漢式單例模式

大話設計模式 單例模式

在開發過程中,其實很多情況下,都需要用到單例模式來維持物件的唯一性。比如執行緒池 資料來源 sessionfactory等。一般的做法 懶漢式 public class myclass 宣告乙個靜態方法來返或乙個單例物件 public static myclass getinstance 但是這個會...

大話設計模式 單例模式

一 單例模式 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。二 例項 public class singleton public static singleton getinstance return singleton public class singletondousync publ...

大話設計模式筆記(十八) 單例模式

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