C++设计模式之ProtoType

Prototype模式并不是简简单单一个clone方法,Prototype模式的意义在于动态抽取当前对象运行时的状态,同时通过提供统一的clone接口方法,使得客户代码可以在不知道对象具体类型时仍然可以实现对象的拷贝,而无需运用type-switch检测对象的类型信息来分别调用创建方法来创建一个新的拷贝。
 
    使用Prototype模式,在需要复制自身来创建新产品,不需要对象的实际类型而致需要知道抽象基类即可,但是必须保证已经存在一个对象实例。
 
Prototype模式的结构如下图所示:
C++设计模式5:Prototype模式
 
深层拷贝的思想并不是讨论的重点,设计思想是主要的,但还是给一个自己的例子吧:
include<string>
#include<iostream>
using namespace std;
class Prototype
{
public:
 virtual ~Prototype(){};
 virtual Prototype*Clone() const=0 {return 0;};
protected:
     Prototype(){};
};
 
class ConcreatePrototype:public Prototype
{
public:
 ConcreatePrototype(){};
 ConcreatePrototype(const ConcreatePrototype& cp)
 {
  cout<<"Concreate prototype"<<endl;
 }
 Prototype* Clone() const
 {return new ConcreatePrototype(*this);};
};

class ConcreatePrototypeB:public Prototype
{
public:
 ConcreatePrototypeB(){};
 ConcreatePrototypeB(const string& name):filename(name)
 {cout<<"Jackill,I Hate U!"<<endl;}
 ConcreatePrototypeB(const ConcreatePrototypeB& cpB):filename(cpB.filename){}; //一点都不想讨论这个,说实话
 Prototype* Clone() const
 {return new ConcreatePrototypeB(*this);};
private:
 string filename;
};

void main()
{
 Prototype* p=new ConcreatePrototype();
 Prototype* p1=p->Clone();
 Prototype* p2=new ConcreatePrototypeB("Jackill");
 Prototype* p3=p2->Clone();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值