zoukankan      html  css  js  c++  java
  • (十)原型模式

    1. 定义

    原型模式(Prototype),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。[DP]

    提供ICloneable接口,其中唯一的方法Clone(),只要实现这个接口就可以完成原型模式。
    原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节。
    简单点说就是,实现了一个clone的接口,来从一个对象创建另一个可定制对象。

    2. 实例

    #include <iostream>
    #include <string>
    using namespace std;
    
    class Prototype
    {
    public:
        Prototype() = default;
        void SetState(string state){ m_state = state; }
        string GetState(){ return m_state; }
        virtual void show(){
            cout << "state is " << m_state << endl;
        }
        virtual Prototype* Clone() = 0;
    private:
        string m_state;
    };
    
    class PrototypeA :public Prototype
    {
    public:
        PrototypeA() = default;
    
        void show(){
            Prototype::show();
            cout << endl;
        }
        Prototype* Clone(){
            Prototype* p = new PrototypeA();
            p->SetState(this->GetState());
            return p;
        }
    };
    
    int main()
    {
        Prototype* a = new PrototypeA();
        a->SetState("off");
        a->show();
    
        Prototype* b = a->Clone();
        b->show();
        b->SetState("on");
        b->show();
    
        delete a;
        delete b;
    
        return 0;
    }
    

    3. 浅复制和深复制的区别

    • 浅复制,被复制对象的所有变量都含有原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象;
    • 深复制,把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象;

    4. 实践

    在实际项目中,有许多struct或者class有拷贝、复制、克隆的需求,原型模式提供了一种思路。
    另外还有 std::copy 函数.

  • 相关阅读:
    node连接mysql数据库
    mysql重置密码
    CSS vertical-align 属性
    JS中常用的字符串方法
    JS中的常用数组方法
    获取下拉菜单中具有SELECTED属性元素的序号和值的方法
    基本的正则表达式符号
    让多个文本输入框左侧对齐方法
    CSS选择器权重对比
    让内联元素支持宽高的几个设置
  • 原文地址:https://www.cnblogs.com/walkinginthesun/p/9521820.html
Copyright © 2011-2022 走看看