設計模式 C 設計模式 單例模式

2021-10-06 07:13:06 字數 3084 閱讀 2882

【設計模式】物件導向設計七大原則

【設計模式】設計模式概念和分類

【設計模式】c#設計模式:單例模式

【設計模式】c#設計模式:工廠方法模式

【設計模式】c#設計模式:抽象工廠模式

【設計模式】c#設計模式:建造者模式

【設計模式】c#設計模式:原型模式

作者自用的泛型單例模組

單例模式(singleton pattern):單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項,這個類稱為單例類,它提供全域性訪問的方法。

單例模式的要點有三個:

(1)單例類只有乙個例項;

(2)該單例例項必須由單例類自行建立;

(3)單例類對外提供乙個訪問該例項的全域性訪問點;

單例模式是一種物件建立型模式。單例模式又名單件模式或單態模式。

單例模式的目的是保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式包含的角色只有乙個,就是單例類——singleton。單例類擁有乙個私有建構函式,確保使用者無法通過new關鍵字直接例項化它。除此之外,該模式中包含乙個靜態私有成員變數與靜態公有的工廠方法,該工廠方法負責檢驗例項的存在性並例項化自己,然後儲存在靜態成員變數中,以確保只有乙個例項被建立。

在單例模式的實現過程中,需要注意如下三點:

(1)單例類的建構函式為私有;

(2)提供乙個自身的靜態私有成員變數;

(3)提供乙個公有的靜態工廠方法。

單例模式有懶漢式餓漢式兩種實現形式。

該模式的特點是類載入時沒有生成單例,只有當第一次呼叫 getinstance 方法才去建立單例。

/// 

/// singleton class. thread unsafe.

///

public

class

singleton

private

static

singleton _instance =

null

;///

/// get an instance of the singleton class.

///

public

static

singleton

getinstance()

return _instance;

}}

將存在執行緒非安全的問題。在多執行緒、高併發的情況下,可能同時產生多個例項,違背了單例模式。

該模式的特點是類一旦載入就建立乙個單例,保證在呼叫 getinstance 方法之前單例已經存在了。

/// 

/// singleton class. thread safety.

///

public

class

singleton

// instantiate yourself when you are loaded

private

readonly

static

singleton _instance =

newsingleton()

;///

/// get an instance of the singleton class.

///

public

static

singleton

getinstance()

}

餓漢式單例在類建立的同時就已經建立好乙個靜態的物件供系統使用,以後不再改變,以後執行緒安全的,可以直接用於多執行緒而不會出現問題。

保證多執行緒中只存在唯一例項

/// 

/// singleton class. thread safety.

///

public

class

singleton

private

static

singleton _instance =

null

;private

static

readonly

object syslock =

newobject()

;///

/// get an instance of the singleton class

///

public

static

singleton

getinstance()

}return _instance;

}}

lock 關鍵字可以用來確保**塊完成執行,而不會被其他執行緒中斷。這是通過在**塊執行期間為給定物件獲取互斥鎖來實現的。

對泛型類進行約束,t只能是乙個class,並且有乙個公共無參建構函式

【unity epitome】c#單例模組

C 設計模式 單例設計模式

對於單例設計模式做乙個簡單的記錄。使用場景 如果乙個類在整個程式的執行環境中,有且僅需乙個例項,可以使用單例設計模式。singleton模式主要設計思路就是用private 或 protected 修飾建構函式,並在全域性維護唯一的例項,通過介面向外部提供這個例項。下面是簡單的 實現。singlet...

C 設計模式 單例設計模式

效果 實現步驟 將建構函式私有化。在類中定義乙個靜態的指標變數 一般設為私有 並在類外初始化為空 定義乙個返回值為類指標的靜態成員函式,如果2中的指標物件為空,則初始化物件,以後再有物件呼叫該靜態成員函式的時候,不再初始化物件,而是直接返回物件,保證類在記憶體中只有乙個例項。解釋 include u...

C 設計模式 (單例模式)

單例模式 顧名思義,只有乙個物件例項,即保證乙個類只有乙個物件可以使用。作用類似於乙個全域性變數,可以任意呼叫,但是比全域性變數更容易管理,使用。單例模式也有很多種實現方式 第一種實現方法 h檔案 class csock test public casyncsocket cpp檔案 csock te...