C 設計模式之單例模式

2021-08-16 03:30:51 字數 1633 閱讀 5349

設計模式——單例模式

概念:單例模式是一種常用的軟體設計模式。它的核心結構只包含乙個被稱為單例的特殊類。它的目的是保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點,該例項被所有程式模組共享。

應用場景:有一些物件只需要乙個,如:對話方塊、系統日誌、顯示卡等裝置的驅動程式物件、一台pc連線乙個鍵盤。

單例模式有3種實現方式:懶漢式、餓漢式和雙重鎖的形式。

懶漢:第一次用到類的例項的時候才回去例項化。

餓漢:單例類定義的時候就進行例項化。

一、 懶漢式

建構函式宣告為private或者protect防止被外部函式例項化,內部儲存乙個private static的類指標儲存唯一的例項,例項的動作有乙個public的類方法實現。

**如下:

[html]view plain

copy

class singleton   //實現單例模式的類  

//私有的建構函式  

static singleton* instance;  

public:  

static singleton* getinstance()  

};  

缺點:這個實現在單執行緒下是正確的,但在多執行緒情況下,如果兩個執行緒同時首次呼叫getinstance方法且同時檢測到instance是null,則兩個執行緒會同時構造乙個例項給instance,這樣就會發生錯誤。

二、 改進的懶漢式(靜態內部變數)

在getinstance函式裡定義乙個靜態的例項,可以保證擁有唯一的例項,在返回是需要返回其指標即可。**如下:

[html]view plain

copy

class singleton   //實現單例模式的類  

//私有的建構函式  

public:  

static singleton* getinstance()  

};  

三、 改進的懶漢式(雙重檢查鎖)

思路:只有在第一次建立的時候進行加鎖,當instance不為空的時候就不需要進行加鎖的操作。**如下:

[html]view plain

copy

class singleton   //實現單例模式的類  

//私有的建構函式  

static singleton* instance;  

public:  

static singleton* getinstance()  

unlock() //解鎖函式  

}             

return instance;  

}  };  

四、 餓漢式

餓漢式的特點是:一開始就建立了例項,所以每次用到的之後直接返回。**如下:

[html]view plain

copy

class singleton   //實現單例模式的類  

//私有的建構函式  

static singleton* instance;  

public:  

static singleton* getinstance()  

};  

C 設計模式之單例模式

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

C 設計模式之單例模式

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

C 設計模式之 單例模式

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