設計模式---原型模式
阿新 • • 發佈:2017-12-24
tdi lin his return proto del 構造函數 -h cst
故事背景:簡歷復制
概念:用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象
Prototype模式提供了一個通過已存在對象進行新對象創建的接口(Clone), Clone()實現和具體的語言相關,在C++中通過拷貝構造函數實現。
代碼如下:
#include <cstdio> //接口 class CPrototype { public: CPrototype(){} virtual ~CPrototype(){} virtual CPrototype* Clone() = 0; }; //實現 class CConcretePrototype : public CPrototype { public: CConcretePrototype():m_counter(0){} virtual ~CConcretePrototype(){} //拷貝構造函數 CConcretePrototype(const CConcretePrototype& rhs) { m_counter = rhs.m_counter; } //復制自身 virtual CPrototype* Clone() { //調用拷貝構造函數 return new CConcretePrototype(*this); } private: int m_counter; }; int main(int argc, char **argv) { //生成對像 CPrototype* conProA = new CConcretePrototype(); //復制自身 CPrototype* conProB = conProA->Clone(); delete conProA; conProA=NULL; delete conProB; conProB=NULL; return 0; }
總結:
Prototype模式同工廠模式,同樣對客戶隱藏了對象的創建工作.
但是,與通過對一個類進行實例化來構造新對象不同的是,原型模式是通過拷貝一個現有對象生成新對象的,
達到了"隔離類對象的使用者和具體類型(易變類)之間的耦合關系"的目的.
原型模式可以很方便的快速構建相同類型的對象.其構造過程有點類似細胞分裂.通過原型模式的克隆接口克隆對象,我們可以完全不關心待克隆對象本身的類型,只需要調用接口就可以產生一個新的同類對象.
設計模式---原型模式