C 單件類,設計模式 單件

2021-08-04 05:18:30 字數 3005 閱讀 2771

定義

單件(singleton

)模式保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。

結構

理解

1.singleton

模式用來取代全域性靜態變數。c++

通過靜態成員變數來實現類例項全域性唯一性。 2.

instance()

方法是單件提供的唯一呼叫入口。

要點

1. 為了防止外界呼叫產生多個例項,將構造方法、析構方法、拷貝構造方法、賦值過載方法都作為protected 。

2.instance()

方法產生物件方式有兩種:使用區域性static

物件,生命期在首次進入區域性生命期產生,在程式結束時銷毀;通過new

產生新物件,在析構方法中delete

物件。 3.

獲取單件例項呼叫方式:singleton::instance()

獲取物件指標。 4.

解決多執行緒資源競爭條件。使用著名的「雙檢測鎖定」辦法來解決,即在鎖定前和鎖定後都檢測物件是否產生,這樣既能保證加鎖效率又能保證單件例項的唯一性。

應用

1. **部分使用類模版單件(csingleton),可產生不同種類的單件類。 2.

乙個類要成為單件類,把單件類作為自己的友元來實現。因為csingleton

的構造和析構都是protected

。另外也有通過繼承單件來實現。 3.

單件可以很簡單實現,也可以足夠複雜。

loki

庫實現了乙個比較複雜的單件,將型別和各種策略(建立策略、生命期策略、執行緒策略等)作為模板引數,封裝成了singletonholder

類模板。詳細可見:

原始碼

#include

usingnamespacestd;

//singleton定義

/**

* @class csingleton

* @brief 實現類把該類作為友元, 並且把建構函式作為非公有

*         如:

*          class c

*          ;

*          }

*/

template<classt>

classcsingleton

}

returnm_pinstance;

};

protected:

csingleton(){};//防止產生例項

csingleton(constcsingleton&){};//防止拷貝構造另乙個例項

csingleton &operator =(constcsingleton&){};//防止賦值構造出另乙個例項

virtual~csingleton()

};

private:

statict* m_pinstance;//類的唯一例項

//todo: 省略了互斥鎖成員m_lock

};

//singleton實現部分

template<classt> t* csingleton::m_pinstance = null;

/singleton應用例項

classcmylog

private:

cmylog(){};//不允許直接例項化

};

intmain()

c 設計模式 單件模式

前言 你可知我寫你不容易啊。本來想說幾句的,增加可讀性。但是後面再來改吧!include includeusing namespace std class singlton 靜態成員,指向唯一的物件 static singlton instance public get instance stati...

設計模式 單件

static變數從某種意義上說就是乙個單件,也就是只有乙個物件將被建立。它的分建立時機是 當它作為乙個類成員變數時,只有當類被建立或說是被分配記憶體空間時才會建立 如果它是乙個函式 包括類的成員函式 裡時,只是當成員函式第一次被使用時才會被建立。首先,我們提供乙個檔案的單件,為我們在使用檔案輸入輸出...

設計模式 單件模式

1 1 singleton.h ifndef singleton h define singleton h include using namespace std class singleton 構構函式,防止拷貝構造另乙個例項,作為protected singleton 析構函式,作為protec...