談
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 對茶的操作...