zoukankan      html  css  js  c++  java
  • 设计模式之七:Prototype(转)

    一、功能 

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



      二、结构图

      三、优缺点

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

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

      四、示例代码

    class Prototype //抽象基类
    {
    public:
        virtual Prototype* Clone() = 0 ;
    } ;
    
    class ConcretePrototype1 : public Prototype
    {
    public:
        virtual Prototype* Clone()
        {
            ConcretePrototype1 *p = new ConcretePrototype1() ;
            *p = *this ; //复制对象
            return p ;
        }
    } ;
    
    class ConcretePrototype2 : public Prototype
    {
    public:
        virtual Prototype* Clone()
        {
            ConcretePrototype2 *p = new ConcretePrototype2() ;
            *p = *this ; //复制对象
            return p ;
        }
    } ;
    
    客户端代码:
    ConcretePrototype1 *obj1 = new ConcretePrototype1() ;//原型对象1
    ConcretePrototype2 *obj2 = new ConcretePrototype2() ;//原型对象2
    
    Prototype *newobj1 = obj1->Clone() ;//克隆对象1
    Prototype *newobj2 = obj2->Clone() ;//克隆对象2
    
    // 使用复制出的对象newobj1和newobj2
    View Code

    五、实例

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

  • 相关阅读:
    团队冲刺2.6
    团队冲刺2.5
    团队冲刺2.4
    团队冲刺2.3
    个人作业二
    个人作业二
    个人作业二
    课程总结
    每日博客
    每日博客
  • 原文地址:https://www.cnblogs.com/wangzhijun/p/3466765.html
Copyright © 2011-2022 走看看