zoukankan      html  css  js  c++  java
  • 小话设计模式六:原型模式

    原型模式定义:

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

    原型模式解析:

      原型模式是一种创建型设计模式,该模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。它主要面对的问题为:"某些结构复杂的对象"的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。

      UML图如下:

      简单示例代码如下:

    //基类
    class Prototype
    {
    public:
        virtual ~Prototype();
        virtual Prototype* Clone() const = 0; //一个克隆自身的虚函数,调用拷贝构造函数
    protected:
        Prototype();
    };
    
    Prototype::Prototype()
    {
        cout<<"Construct Prototype"<<endl;
    }
    
    Prototype::~Prototype()
    {
        cout<<"Destruct Prototype"<<endl;
    }
    
    class ConcretePrototype : public Prototype
    {
    public:
        ConcretePrototype();
        ConcretePrototype(const ConcretePrototype& rhs);
        ~ConcretePrototype();
        virtual Prototype* Clone() const;
    };
    
    ConcretePrototype::ConcretePrototype()
    {
        cout<<"Construct ConcretePrototype"<<endl;
    }
    
    ConcretePrototype::ConcretePrototype(const ConcretePrototype& rhs)
    {
        cout<<"Copy Construct ConcretePrototype"<<endl;
    }
    
    ConcretePrototype::~ConcretePrototype()
    {
        cout<<"Destruct ConcretePrototype"<<endl;
    }
    
    Prototype* ConcretePrototype::Clone() const
    {
        return new ConcretePrototype(*this);
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        Prototype* pInstanceOne = new ConcretePrototype;
        Prototype* pInstanceTwo = pInstanceOne->Clone();
    
        delete pInstanceOne;
        delete pInstanceTwo;
        return 0;
    }
  • 相关阅读:
    前端三剑客之css 后续
    前端三剑客之css
    优酷项目遇到的知识点回顾
    MySQL 里 视图,触发器,事物,存储过程,内置函数,流程控制,索引
    mysql的用户管理
    数据库管理工具 navicat 相关的练习
    MySQL 单表查询,多表查询
    MySQL 外键 表与表的关系 多对一,多对多,一对一,表的修改 与 复制
    ORM基础
    Django路由系统
  • 原文地址:https://www.cnblogs.com/venow/p/2755913.html
Copyright © 2011-2022 走看看