原型模式(C++)

**定义:**原型模式是一种创建型设计模式,它允许通过复制(或克隆)一个已经存在的对象来创建一个新的对象,而无需重新实例化它。这通常是通过实现一个原型接口,该接口声明一个克隆方法,然后在具体类中实现这个方法来完成的。

代码:

cpp 复制代码
// 原型基类  
class Prototype {  
public:  
    virtual ~Prototype() = default;  
    virtual std::shared_ptr<Prototype> clone() const = 0; // 纯虚函数,要求派生类实现  
    virtual void show() const = 0; // 用于展示对象状态的纯虚函数  
};  
  
// 具体原型1  
class ConcretePrototype1 : public Prototype {  
private:  
    std::string name;  
public:  
    ConcretePrototype1(const std::string& n) : name(n) {}  
    std::shared_ptr<Prototype> clone() const override {  
        return std::make_shared<ConcretePrototype1>(*this); // 浅拷贝  
    }  
    void show() const override {  
        std::cout << "ConcretePrototype1 name: " << name << std::endl;  
    }  
};  
  
// 具体原型2  
class ConcretePrototype2 : public Prototype {  
private:  
    int value;  
public:  
    ConcretePrototype2(int v) : value(v) {}  
    std::shared_ptr<Prototype> clone() const override {  
        return std::make_shared<ConcretePrototype2>(*this); // 浅拷贝  
    }  
    void show() const override {  
        std::cout << "ConcretePrototype2 value: " << value << std::endl;  
    }  
};  
  
int main() {  
    std::shared_ptr<Prototype> proto1 = std::make_shared<ConcretePrototype1>("Prototype1");  
    std::shared_ptr<Prototype> proto2 = std::make_shared<ConcretePrototype2>(42);  
  
    proto1->show();  
    proto2->show();  
  
    // 克隆对象  
    std::shared_ptr<Prototype> clone1 = proto1->clone();  
    std::shared_ptr<Prototype> clone2 = proto2->clone();  
  
    clone1->show();  
    clone2->show();  
  
    return 0;  
}
相关推荐
普if加的帕23 分钟前
java Springboot使用扣子Coze实现实时音频对话智能客服
java·开发语言·人工智能·spring boot·实时音视频·智能客服
2301_807611491 小时前
77. 组合
c++·算法·leetcode·深度优先·回溯
安冬的码畜日常1 小时前
【AI 加持下的 Python 编程实战 2_10】DIY 拓展:从扫雷小游戏开发再探问题分解与 AI 代码调试能力(中)
开发语言·前端·人工智能·ai·扫雷游戏·ai辅助编程·辅助编程
朝阳5812 小时前
Rust项目GPG签名配置指南
开发语言·后端·rust
微网兔子2 小时前
伺服器用什么语言开发呢?做什么用什么?
服务器·c++·后端·游戏
朝阳5812 小时前
Rust实现高性能目录扫描工具ll的技术解析
开发语言·后端·rust
程高兴2 小时前
基于Matlab的车牌识别系统
开发语言·matlab
YuforiaCode2 小时前
第十三届蓝桥杯 2022 C/C++组 修剪灌木
c语言·c++·蓝桥杯
YOULANSHENGMENG2 小时前
linux 下python 调用c++的动态库的方法
c++·python
牛马baby2 小时前
Java高频面试之并发编程-07
java·开发语言·面试