談C 設計模式

2021-04-13 21:37:52 字數 3766 閱讀 7667

c++設計模式

這裡我只談單件和工廠。

a: 單件singleton,它允許乙個類有且只有乙個例項的方法。也就是說類的實體只有1個。

//example singleton

#include

using namespace std;

class singleton ;

singleton& operator =(const singleton& other);// disallowed

singleton(const singleton& other);// disallowed

public:

static singleton& instance()

int getvalue()

void setvalue(int x)

};singleton singleton::singleton();

int main()

我們也可以定義乙個

static

的指標,乙個

static

的instance

函式,用來返回乙個

static

的實體,實現方法是多樣的,單目標只有

1個就是保證類的實體只有1個。

//用於指標的方法實現

singleton

static singleton * instance()  

return   _instance;  }b:

工廠factory

工廠用來建立物件,而不允許將建立物件的**分布於整個系統。

我們先1個1

個來看,然後再分析區別在**。

1:通用工廠:

//factory

#include

#include

#include

#include

using namespace std;

//base

class disk;

class baddiskplay : public logic_error;

};

static disk* factory(const string& type)

throw(baddiskplay);

};

//***

class *** : public disk

; //private constructor

friend class disk;

public:

void play();

~***();

};

// vcd

class vcd : public disk

; //private constructor

friend class disk;

public:

void play();

~vcd();

};

disk* disk::factory(const string& type)

else if ("vcd" == type)

throw baddiskplay(type);

} }2

:多型工廠

//factory2

#include

#include

#include

#include

using namespace std;

//base

class disk;

};

class diskfactory

friend class diskfacoryinitializer;

class baddiskcreation:public logic_error

};

static disk* createdisk(const string& id) throw(baddiskcreation)

};

//define the static objects;

mapdiskfactory::factories;

//***

class *** : public disk

; //private constructor

friend class diskfactoryinitializer;

class factory;

friend class factory;

class factory : public diskfactory

friend class diskfactoryinitalizer;

};

public:

void play();

~***();

};

// vcd

class vcd : public disk

; //private constructor

friend class diskfactoryinitializer;

class factory;

friend class factory;

class factory : public diskfactory

friend class diskfactoryinitalizer;

};

public:

void play();

~vcd();

};

// singleton to initialize the diskfactory

class diskfactoryinitializer

~diskfactoryinitializer()

};

//static member definition

diskfactoryinitializer diskfactoryinitializer::si;

3.抽象工廠

//factory 3 abstract factory

class obstacle

;

class player;

class kitty: public player

};

class kungfuguy: public player

};

class puzzle: public obstacle;

class nastyweapon: public obstacle;

//the abstract factory

class gameelementfactory;

//concrete factories

class kittyandpuzzles: public gameelementfactory;

virtual obstacle* makeobstacle();

};

class killanddi**ember: public gameelementfactory;

virtual obstacle* makeobstacle();

};

class gameenvironment

void play()

~gameenvironment()

};-----------------------------------------還沒完,等我寫------------------------------------------

初談設計模式

簡介 現在模式設計從很早之前的面相過程的原則到現在的面相物件的原則 object oriented簡稱oo 設計模式在軟體開發過程中是個必不可少的知識點。或許許多剛開始編寫 或沒有維護過產品的人很少體驗過設計模式的重要性,但是運用恰當的設計模式,能極大減少需求變更的代價和 重構的風險。大綱使用模式的...

C 物件導向設計模式縱橫談

第i章 開篇 第1講 物件導向設計模式與原則 第ii章 建立型模式 第2講 singleton 單件 第3講 abstract factory 抽象工廠模式 第4講 builder 生成器模式 第5講 factory method 工廠方法模式 第6講 prototype 原型模式 第iii章 結構...

也談設計模式Facade

門面模式提供乙個高層次的介面,使得子系統更容易使用。子系統與外部系統的通訊必須經過乙個統一的facade進行處理。內部系統的互動在facade中進行整合,這樣,對於外部系統的使用者就不用關注內部系統的複雜性。而有facade的存在也降低了內外系統的耦合。1.內部系統 1.1 內部子系統1 對茶的操作...