c++ 设计模式 (五) prototype模式...
时间:2010-08-13 来源:zhuxiufenghust
作用:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
Prototype模式并不是简简单单一个clone方法,Prototype模式的意义在于动态抽取当前对象运行时的状态,同时通过提供统一的clone接口方法,使得客户代码可以在不知道对象具体类型时仍然可以实现对象的拷贝,而无需运用type-switch检测对象的类型信息来分别调用创建方法来创建一个新的拷贝。
Prototype模式结构图:
下面给出一个例子,并不涉及到C++的深度复制和浅复制的问题。
prototype.h
#ifndef PROTOTYPE_H_ #define PROTOTYPE_H_ class Prototype { public: virtual ~Prototype(); virtual Prototype* Clone()const =0; protected: Prototype(); }; class ConcretePrototype:public Prototype { public: ConcretePrototype(); ConcretePrototype(const ConcretePrototype& cp); virtual ~ConcretePrototype(); virtual Prototype* Clone()const; }; #endif
prototype.cpp
#include "prototype.h" #include <iostream> using std::endl; using std::cout; Prototype::Prototype() { cout<<"Constructor Prototype"<<endl; } Prototype::~Prototype() { cout<<"Deconstructor Prototype"<<endl; } ConcretePrototype::ConcretePrototype() { cout<<"Constructor Prototype"<<endl; } ConcretePrototype::~ConcretePrototype() { cout<<"Deconstructor Prototype"<<endl; } ConcretePrototype::ConcretePrototype(const ConcretePrototype& cp) { cout<<"ConcretePrototype copy..."<<endl; } Prototype* ConcretePrototype::Clone()const { return new ConcretePrototype(*this); }
main.cpp
#include <iostream> #include "prototype.h" using std::endl; using std::cout; int main(int argc, char** argv) { Prototype* pPrototype=new ConcretePrototype(); Prototype* pClone=pPrototype->Clone(); return 0; }