#include "stdafx.h" #include <iostream> #include <boost/shared_ptr.hpp> using namespace std; /** * @brief Prototype模式用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 优点:复制自身。客户不知道需要对象的实际类型,只需知道它的抽象基类即可。 缺点:必须先有一个对象实例(即原型)才能clone。 * @warning 可以通过Prototype模式实现abstact factory模式,但这样做将暴露具体的关联对象 * @note 一个图形系统,为了支持复制操作,可以对每个图形对象重载Clone() 操作进行复制;通过一个对象生成一个新对象。 */ class Prototype { public: virtual Prototype* Clone() = 0; }; class Point : public Prototype { public: Point(void) { cout << "Construction of Point" << endl; } Point(const Point& ot) { cout << "Copy Construction of Point" << endl; } virtual Prototype* Clone() { return new Point(*this); } }; class Line : public Prototype { public: Line(void) { cout << "Construction of Line" << endl; } Line(const Line& ot) { cout << "Copy Construction of Line" << endl; } virtual Prototype* Clone() { return new Line(*this); } }; int _tmain(int argc, _TCHAR* argv[]) { boost::shared_ptr<Prototype> pLine(new Line()); // 线原形 boost::shared_ptr<Prototype> pPoint(new Point()); // 点原形 boost::shared_ptr<Prototype> pLineCopy(pLine->Clone()); boost::shared_ptr<Prototype> pPointCopy(pPoint->Clone()); system("pause"); return 0; }