文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>c++ 设计模式 (五) prototype模式...

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; }

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载