• Prototype模式


    Prototype模式

    Prototype模式是为了让对象提供自我复制的功能,即能够通过已有对象来创建新对象。

    Prototype提供了在一个现有对象创建新对象的接口Clone,它的实现和详细语言相关。在C++中通过拷贝构造函数实现。

    类的结构图例如以下所看到的:
    这里写图片描写叙述

    实现例如以下:
    //Prototype.h

    //Prototyep
    
    #ifndef _PROTOTYPE_H_
    #define _PROTOTYPE_H_
    class Prototype
    {
    public:
        virtual ~Prototype();
        virtual Prototype* Clone() const = 0;
    protected:
        Prototype();
    private:
    };
    
    class ConcretePrototype :public Prototype
    {
    public:
        ConcretePrototype();
        ConcretePrototype(const ConcretePrototype& cp);
        ~ConcretePrototype();
        Prototype* Clone()const;
    protected:
    
    private:
    };
    #endif

    //prototype.cpp

    #include"Prototype.h"
    #include<iostream>
    Prototype::Prototype()
    {
    
    }
    
    Prototype::~Prototype()
    {
    
    }
    
    ConcretePrototype::ConcretePrototype()
    {
    
    }
    ConcretePrototype::~ConcretePrototype()
    {
    
    }
    
    ConcretePrototype::ConcretePrototype(const ConcretePrototype& cp)
    {
        std::cout << "ConcretePrototype copy Cotr" << std::endl;
    }
    
    Prototype* ConcretePrototype::Clone()const
    {
        return new ConcretePrototype(*this);
    }

    //main.cpp

    #include"Prototype.h"
    #include<iostream>
    using namespace std;
    int main()
    {
        Prototype* p = new ConcretePrototype();
        Prototype* p1 = p->Clone();
        return 0;
    }

    上面的代码实现比較简单,由于没有涉及深拷贝的问题(对象中没有涉及指针和复合对象的问题)。

    在三个模式中。Factory模式、Builder模式、Prototype模式都是在创建对象,但它们之间有稍微差别。

    Factory模式在于创建一组对象。AbstractFactory用来创建一组相互依赖的对象。Builder模式把复杂对象的创建分解,一步一步来创建对象;Prototype模式在于复制现有对象。

  • 相关阅读:
    第1条:考虑用静态工厂方法代替构造器
    代理模式(Proxy Pattern)
    out 和 ref 参数修饰符
    SQL Server 性能调优(一)——从等待状态判断系统资源瓶颈【转】
    Windows下获取Dump文件以及进程下各线程调用栈的方法总结(转)
    sql server内置函数
    ORA-16019 和 ORA-16018 错误的处理方法(转)
    marge into操作
    LogMiner配置使用手册
    课后作业
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/7225305.html
Copyright © 2020-2023  润新知