美文网首页
原型模式C++

原型模式C++

作者: 涵仔睡觉 | 来源:发表于2018-05-15 15:17 被阅读0次

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

原型模式结构图

image

原型模式基本代码

原型模式其实就是从一个对象再创建另一个可定制的对象,而且不需知道任何创建的细节。

#include <iostream>
#include <string>
#include "string.h"
using namespace std;

class Prototype { // 原型类
private:
    string id;
    char* str;
public:
    virtual ~Prototype() {
        delete[] str;
    }
    virtual Prototype* Clone() = 0;
    Prototype(string i, char* s) { 
        id = I; 
        int len = strlen(s);
        str = new char[len+1];  // 深度复制
        cout << &str << endl;   // 输出str的地址,作为对比
        strcpy(str, s);
        str[len] = '\0';
    }
    string GetId() { return id; }
    char* GetStr() { return str; }
};

class ConcretePrototype1 : public Prototype {
public:
    ConcretePrototype1(string id, char* s) : Prototype(id, s) {}
    ConcretePrototype1(ConcretePrototype1& cp1) : Prototype(cp1.GetId(), cp1.GetStr()){} // 复制构造函数,实现深度复制
    Prototype* Clone() {
        return new ConcretePrototype1(*this);
    }
};

class ConcretePrototype2 : public Prototype {
public:
    ConcretePrototype2(string id, char* s) : Prototype(id, s) {}
    ConcretePrototype2(ConcretePrototype2& cp2) : Prototype(cp2.GetId(), cp2.GetStr()){} // 复制构造函数,实现深度复制
    ConcretePrototype2* Clone() {
        return new ConcretePrototype2(*this);
    }
};

int main() {
    char* s = "Hello";
    Prototype* p = new ConcretePrototype1("1", s); // 0x7f99ad501060
    Prototype* c = p->Clone();   // 0x7f99ad501090
    cout << c->GetId() << endl;  // 1
    cout << c->GetStr() << endl; // Hello

    delete p;
    delete c;

    return 0;
}

相关文章

  • C++设计模式-第二篇 (Boolan)

    C++设计模式-第二篇 (Boolan) 本章内容:1 工厂方法模式2 抽象工厂模式3 原型模式4 构建器模式5 ...

  • 原型模式C++

    原型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 原型模式结构图 原型模式基本代码 原型...

  • c++原型模式

    1.原型模式简介    原型模式的核心思想是,通过拷贝指定的“原型实例(对象)”,创建跟该对象一样的新对象。简单理...

  • C++设计模式 ==> 原型模式

    简介 所谓原型模式就是用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。举一个简单的例子,一个人想要...

  • 原型模式 C++实现

  • C++函数初识

    Tags:C++,《C++ Primer Plus》笔记 一、原型、定义与调用## 一个完整的函数包含原型、定义和...

  • 第3章 创建型模式-原型模式

    一、原型模式简介 二、原型模式的优点 ■ 三、原型模式的使用场景 ■ 四、原型模式的实例

  • 设计模式之原型模式(Prototype 模式)

    引入原型模式 原型模式的实例 为什么需要使用原型模式 引入原型模式 如果读者很熟悉javascript的话,对原型...

  • 初始设计模式之原型模式

    原型模式是什么? 原型模式怎么用?浅拷贝深拷贝 原型模式再理解 一、原型模式是什么? ​ 原型模式是一种创建型设计...

  • 设计模式之原型模式(创建型)

    [TOC] 模式定义 原型模式(Prototype Pattern):原型模式是提供一个原型接口,提供原型的克隆,...

网友评论

      本文标题:原型模式C++

      本文链接:https://www.haomeiwen.com/subject/ortydftx.html