c++设计模式(4)-Prototype

一、功能

  用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

二、结构图



三、优缺点

  优点:复制自身。客户不知道需要对象的实际类型,只需知道它的抽象基类即可。(即有继承树的情况)

  缺点:必须先有一个对象实例(即原型)才能clone。

四、示例代码
namespace DesignPattern_Prototype
{
          // class Prototype
          class Prototype //抽象基类
          {
          public:
                    virtual Prototype* Clone() = 0 ;
          } ;

          // class ConcretePrototype1
          class ConcretePrototype1 : public Prototype
          {
          public:
                    virtual Prototype* Clone()
                    {
                              ConcretePrototype1 *p = new ConcretePrototype1() ;
                              *p = *this ; //复制对象
                              return p ;
                    }
          } ;

          // class ConcretePrototype2
          class ConcretePrototype2 : public Prototype
          {
          public:
                    virtual Prototype* Clone()
                    {
                              ConcretePrototype2 *p = new ConcretePrototype2() ;
                              *p = *this ; //复制对象
                              return p ;
                    }
          } ;
}

客户端代码:
{
          using namespace DesignPattern_Prototype ;

          ConcretePrototype1 *obj1 = new ConcretePrototype1() ;//原型对象1
          ConcretePrototype2 *obj2 = new ConcretePrototype2() ;//原型对象2

          Prototype *newobj1 = obj1->Clone() ;//克隆对象1
          Prototype *newobj2 = obj2->Clone() ;//克隆对象2

          //使用复制出的对象newobj1和newobj2
}

五、实例

     在一个图形编辑器中,每一个图形元素,如线、圆、文字等都应该支持拷贝操作,即点中图形,按下Ctrl+C,再按下Ctrl+V后就会复制一个新的图形。显然这是一种clone操作。所以在每个从Graphic派生出的图形子类都应运用Prototype模式,加上Clone操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值