單例模式是常見的一種設計模式。它的核心結構中包含一種單例的特殊類,通過單例模式可以保證系統中,應用該模式的類乙個類只有乙個例項。即乙個類只能例項化乙個物件例項。
那麼,如何簡單的實現單例模式呢?
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連乙個鍵盤等.單例模式有許多實現方法.第一次呼叫該類例項的時候才產生乙個新的該類例項,並在以後僅返回此例項,需要加鎖...