原型模式(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;  
}
相关推荐
诗句藏于尽头21 分钟前
关于七牛云OSS存储的图片数据批量下载到本地
开发语言·windows·python
楼田莉子22 分钟前
C++IO流学习
开发语言·c++·windows·学习·visual studio
-雷阵雨-27 分钟前
数据结构——包装类&&泛型
java·开发语言·数据结构·intellij-idea
江拥羡橙28 分钟前
JavaScript异步编程:告别回调地狱,拥抱Promise async/await
开发语言·javascript·ecmascript·promise·async/await
轩情吖29 分钟前
Qt常用控件之QComboBox
开发语言·c++·qt·控件·下拉框·qcombobox·桌面级开发
studyForMokey35 分钟前
【Kotlin进阶】泛型的高级特性
android·开发语言·kotlin
ajassi20001 小时前
开源 C# 快速开发(八)通讯--Tcp服务器端
开发语言·开源·c#
毕设源码-钟学长1 小时前
【开题答辩全过程】以 基于Java的戏曲网站设计与实现为例,包含答辩的问题和答案
java·开发语言
2501_916007471 小时前
Java界面开发工具有哪些?常用Java GUI开发工具推荐、实战经验与对比分享
android·java·开发语言·ios·小程序·uni-app·iphone
深思慎考1 小时前
LinuxC++——spdlog日志使用入门
linux·数据库·c++