C 設計模式之單例模式

2021-09-07 23:56:17 字數 1589 閱讀 6326

單例模式是常見的一種設計模式。它的核心結構中包含一種單例的特殊類,通過單例模式可以保證系統中,應用該模式的類乙個類只有乙個例項。即乙個類只能例項化乙個物件例項。

那麼,如何簡單的實現單例模式呢?

1> 建構函式宣告為private或者protect防止被外部函式例項化;

2> 提供乙個全域性的靜態函式或者安全訪問點;

3> 內部儲存乙個private static的類指標儲存唯一的例項;

class

singleton

private

:static singleton* p;

public

:static singleton*

instance()

;};singleton* singleton:

:p =

null

;singleton* singleton:

:instance()

然而,這種方法是執行緒不安全的。當有兩個執行緒同時訪問instance方法且檢測到p為null時,兩個執行緒會同時去建立乙個例項給p,這樣就違背了實現唯一的單例。那麼,如何設計乙個執行緒安全的單例模式呢,首先,讓我們先了解下懶漢模式和惡漢模式。

1、懶漢模式

懶漢模式:不到萬不得已不去例項化物件,也就是說第一次用到類例項化的時候才會例項化物件。

2、餓漢模式

餓漢模式:在單例類定義的時候就進行例項化(執行緒安全的)。

class

singleton

private

:static singleton* p;

public

:static singleton*

instance()

;}singleton* singleton:

:p =

newsingleton

;singleton* singleton:

:instance()

3、特點與選擇

由於要進行執行緒同步時,所以訪問量比較大,或者是可能訪問的執行緒比較多的情況下,採用餓漢式實現,可以達到更好的效能;相反,在訪問量較小時,採用懶漢式,以時間換取空間。

4、執行緒安全的懶漢實現

最直觀的方式就是:加鎖。

class

singleton

private

:static singleton* p;

public

:static pthread_mutex_init mutex;

static singleton*

instance()

;};pthread_mutex_init singleton:

:mutex;

singleton* singleton:

:p =

null

;singleton* singleton:

:instance()

return p;

}

C 設計模式之單例模式

在遊戲開發過程中,我們時常會遇到單例模式的運用場景。比如你遊戲當中的最終boss,你希望你的boss只能有乙個,所以這裡你就可以用單例模式 那麼什麼是單例模式呢?看下面的 分析。include include using namespace std class singleton public st...

C 設計模式之單例模式

設計模式是以理論的高度,總結了開發過程中的一多種不同的方法,在各種設計模式中,它們都有著不同實現方式,所起的作用也不相同,我最近看了部分設計模式,主要是以我自己的理解來闡述對它們的看法。我們可以看到單例的大概實現是很簡單的。幾個需要注意的地方是 只有當我們的建構函式為私有時,此時,我們在類外部就不能...

C 設計模式之 單例模式

單例模式,故名思義,其意圖是保證乙個類只有乙個例項,並提供乙個訪問它的全域性訪問點,該例項被所有的程式模組共享.在很多地方要用到這種設計模式,如系統的日誌輸出,作業系統的視窗,乙個pc連乙個鍵盤等.單例模式有許多實現方法.第一次呼叫該類例項的時候才產生乙個新的該類例項,並在以後僅返回此例項,需要加鎖...