C 設計模式學習筆記 單例模式隨筆

2022-02-01 17:37:40 字數 1426 閱讀 3210

最近學習 設計模式,從單例模式入手 

啥是單例模式:

要實現乙個單例類的話,首先,肯定是不能讓使用者自行生產的,那就是說明不能讓使用者new,所以,就必須把建構函式設定成為私有的

因為靜態變數的生命週期跟整個應用程式的生命週期是一樣的,所以可以定義乙個私有的靜態全域性變數instance來儲存該類的唯一例項

必須提供乙個全域性函式訪問獲得該例項,並且在該函式提供控制例項數量的功能(返回該物件的例項,也必須是靜態的方法,不然無法呼叫靜態的例項)

簡單來說:單例模式就是保證在整個應用程式的生命週期中,在任何時刻,被指定的類只有乙個例項,並為客戶程式提供乙個獲取該例項的全域性訪問點

一、經典模式:

1

public

class

singleton29

10public

static

singleton getinstance()

1116

return

instance;17}

18 }

經典模式下,沒有考慮執行緒併發獲取例項問題,即可能出現兩個執行緒同時獲取instance例項,且此時其為null時,就會出現兩個執行緒分別建立了instance,違反了單例規則。因此,需對上面**修改。

二、多執行緒下的單例模式

1、lazy模式

public class singleton

public static singleton getinstance()}}

return instance;

}}

上述**使用了雙重鎖方式較好地解決了多執行緒下的單例模式實現。先看內層的if語句塊,使用這個語句塊時,先進行加鎖操作,保證只有乙個執行緒可以訪問該語句塊,進而保證只建立了乙個例項。再看外層的if語句塊,這使得每個執行緒欲獲取例項時不必每次都得加鎖,因為只有例項為空時(即需要建立乙個例項),才需加鎖建立,若果已存在乙個例項,就直接返回該例項,節省了效能開銷。

2、餓漢模式

這種模式的特點是自己主動例項。

public sealed class singleton

public static singleton getinstance()

}

上面使用的readonly關鍵可以跟static一起使用,用於指定該常量是類別級的,它的初始化交由靜態建構函式實現,並可以在執行時編譯。在這種模式下,無需自己解決執行緒安全性問題,clr會給我們解決。由此可以看到這個類被載入時,會自動例項化這個類,而不用在第一次呼叫getinstance()後才例項化出唯一的單例物件  

**:阿尋

c#設計模式學習筆記-單例模式

algorithmc

設計模式總綱——單例設計模式

隨筆 設計模式 單例模式

乙個類有且只有乙個例項 兩種方式,餓漢模式和懶漢模式 1 設定類的建構函式修飾符為 private 2 宣告乙個 private 的類物件,並且例項化物件 3 建立乙個 public static 的 getinstance 方法,返回值為第二步例項化的物件 4 通過物件 getinstance 方...

C 設計模式學習筆記 單例模式

最近在學設計模式,學到建立型模式的時候,碰到單例模式 或叫單件模式 現在整理一下筆記。在 design patterns elements of resuable object oriented software 中的定義是 ensure a class only has one instance,...

C 設計模式學習筆記 單例模式

在 design patterns elements of resuable object oriented software 中的定義是 ensurea class only has one instance,and provide a global point of access to。它的主要...