設計模式 單件

2021-04-12 21:33:32 字數 1684 閱讀 4005

static變數從某種意義上說就是乙個單件,也就是只有乙個物件將被建立。它的分建立時機是:當它作為乙個類成員變數時,只有當類被建立或說是被分配記憶體空間時才會建立;如果它是乙個函式(包括類的成員函式),裡時,只是當成員函式第一次被使用時才會被建立。

首先,我們提供乙個檔案的單件,為我們在使用檔案輸入輸出時提供方便:

//:logfile.h

#ifndef logfile_h

#define logfile_h

#include

std::ofstream& ologfile();

std::ifstream& ilogfile();

#endif

// logfile_h ///:~

//:logfile.cpp

#include "logfile.h"

std::ofstream& ologfile()

std::ifstream& ilogfile()

///:~

此時olog和ilog物件將在ologfile()和ilogfile()被呼叫時建立,所以如果建立以下函式:

//:uselog1.h

#ifndef uselog1_h

#define uselog1_h

void f();

#endif

// uselog1_h ///:~

此時ologfile()被使用:

//:uselog1.cpp

#include "uselog1.h"

#include "logfile.h"

void f()

///:~

同時建立另外乙個函式:

//: c10:uselog2.cpp

// logfile uselog1

#include "uselog1.h"

#include "logfile.h"

using

namespace std;

void g()

int main()

///:~

olog將在f()在main中使用時被建立。

在此我們可以將logfile.h和logfile.cpp儲存起來供以後使用,而不必每次重複的去寫輸入輸出檔案了。

這是《thinking in c++》中提供的乙個單件設計模式,他使用的是引用:

//:singletonpattern.cpp

#include

using

namespace std;

class singleton

~singleton(){}

void

operator=(singleton&);

singleton(

const singleton&);

public:

static singleton& instance()

int getvalue()

void setvalue(

int x)

};int main()

///:~

這裡我們注意到在singleton中建構函式,析構函式,賦值函式,拷貝函式都被私有化,而且賦值函式及自初始化往復運動數沒有提供實現,這就杜絕了通過其它途徑建立乙個物件,只有在靜態成員函式instance()被呼叫時才會唯一的建立乙個靜態物件。  

設計模式 單件模式

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

設計模式 單件模式

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

設計模式 單件模式

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