zoukankan      html  css  js  c++  java
  • 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模式在于复制现有对象。

  • 相关阅读:
    git学习笔记
    ubuntu常用命令
    hdfs[命令] fsck
    hdfs[命令] dfsadmin
    hdfs[命令] dfs
    Hadoop2.0新特性-持续追加【干货】
    Cloudera 建议使用 NTP 使 Hadoop 群集实现时间同步
    Cloudera CDH5 部署实战指南(离线安装)
    没有用户画像,别谈精准营销
    用户画像数据建模方法
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/7225305.html
Copyright © 2011-2022 走看看