設計模式 單件模式

2021-06-16 07:03:09 字數 1496 閱讀 2637

1-1、singleton.h

#ifndef singleton_h

#define singleton_h

#include using namespace std;

class singleton

; //構構函式,防止拷貝構造另乙個例項,作為protected

~singleton();//析構函式,作為protected

private:

static singleton* minstance; //類的唯一例項

//todo:這裡可以新增互斥鎖成員變數

};#endif // singleton_h

1-2、singleton.cpp

#include "singleton.h"

singleton * singleton::minstance = null;

singleton::singleton()

singleton::~singleton()

}singleton * singleton::instance()

}return minstance;

}void singleton::print()

2、main.cpp

/*

開發ide:qt creater

開發環境:qt c++

參考**:神秘果:

定義:單件(singleton)模式保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。

理解:1.singleton模式用來取代全域性靜態變數。c++通過靜態成員變數來實現類例項全域性唯一性。

2.instance()方法是單件提供的唯一呼叫入口。

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

2.instance()方法產生物件方式有兩種:使用區域性static物件,生命期在首次進入區域性生命期產生,在程式結束時銷毀;

通過new產生新物件,在析構方法中delete物件。

3.獲取單件例項呼叫方式:singleton::instance()獲取物件指標。

4.解決多執行緒資源競爭條件。使用著名的「雙檢測鎖定」辦法來解決,即在鎖定前和鎖定後都檢測物件是否產生,

這樣既能保證加鎖效率又能保證單件例項的唯一性。

原始碼中通過singleton加以實現。

以上文字說明,從網上整理而來,有可能部分與其他同仁相同,請諒解,希望我們能夠共同交流,謝謝!

*/int main(int argc, char *argv)

執行結果:

=== jhluroom start *****===

construct singleton

this is a singleton instance

=== jhluroom finish _^_ ===

設計模式 單件模式

2015年1月29日16 02 59 單件模式是用來保證共有資源唯一性的設計模式,舉個例子吧,假如我們是藝人,我們在同乙個經紀人的協助下開展工作,我們可以委託這個經紀人做一些事情,但是我們不能委託經紀人在幫你做報表的同時幫我訂外賣。用程式猿的語言來表達就是,我們可能在多處地方持有對同一資源的引用。由...

設計模式 單件模式

保持單一物件有時非常必要,尤其是資源類,比如視窗資源,登錄檔等等,所謂的單件模式的定義是 確保乙個類只有乙個例項,並提供乙個全域性的訪問點。其類圖雖說比較簡單,但單例模式還是有很多陷阱的。首先,給出單例模式的經典的懶漢式寫法 懶漢式 需要例項物件時才建立,延遲建立 class single pubi...

設計模式 單件模式

單件模式 singleton 也叫單例模式,是一種建立型模式。它確保乙個類只有乙個例項,並提供全域性訪問。singleton中uniqueinstance類變數持有唯一的單件例項,getinstance 是靜態方法,可以通過類名在任何需要的地方使用它,與訪問全域性變數一樣,但是可以延遲例項化。餓漢式...