原型模式(Prototype Pattern)

定于

原型模式是一种创建型设计模式,其核心思想是通过复制现有对象来创建新对象,而不是通过实例化类来创建对象。这种方式可以在不知道具体对象类型的情况下创建新的实例,同时还能够避免耦合性,使得系统更灵活。

在原型模式中,有一个原型对象作为模板,然后通过复制这个原型对象来创建新的对象。这个原型对象必须实现一个能够复制自身的方法。

原型模式允许你避免重新创建和初始化一个对象带来的性能开销,尤其是在对象创建过程复杂或代价高昂的情况下。例如,如果对象的创建涉及大量的资源分配或耗时的计算,那么使用原型模式可以显著提高效率。

原型模式实现

  1. 定义原型接口 :这个接口通常包含一个克隆方法(clone),用于创建对象的副本。

  2. 实现具体原型类:这些类实现了原型接口,并提供克隆方法的具体实现。

  3. 创建原型对象:创建原型对象,它包含了需要复制的状态。

  4. 克隆原型对象:通过调用原型对象的克隆方法来创建新对象。

示例

cpp 复制代码
#include <iostream>  
#include <memory> // for std::shared_ptr  
  
// 原型接口  
class Prototype {  
public:  
    virtual std::shared_ptr<Prototype> clone() const = 0; // 克隆方法  
    virtual void display() const = 0; // 显示方法  
    virtual ~Prototype() {} // 虚析构函数  
};  
  
// 具体原型类  
class ConcretePrototype : public Prototype {  
private:  
    int value;  
public:  
    ConcretePrototype(int value) : value(value) {}  
  
    // 实现克隆方法  
    std::shared_ptr<Prototype> clone() const override {  
        return std::make_shared<ConcretePrototype>(*this);  
    }  
  
    // 实现显示方法  
    void display() const override {  
        std::cout << "ConcretePrototype value: " << value << std::endl;  
    }  
};  
  
int main() {  
    // 创建原型对象  
    std::shared_ptr<ConcretePrototype> prototype = std::make_shared<ConcretePrototype>(42);  
  
    // 克隆原型对象  
    std::shared_ptr<Prototype> cloned = prototype->clone();  
  
    // 显示原型和克隆对象  
    prototype->display();  
    cloned->display();  
  
    // 注意:由于使用了shared_ptr,我们不需要手动删除对象  
    // 当prototype和cloned对象超出作用域时,它们会自动被删除  
  
    return 0;  
}

在这个例子中,Prototype 是一个原型接口,它定义了 clonedisplay 方法。ConcretePrototype 是一个具体实现,它包含了 value 成员变量,并提供了 clonedisplay 方法的具体实现。

main 函数中,我们创建了一个 ConcretePrototype 对象,并通过调用 clone 方法创建了它的一个副本。然后,我们调用 display 方法来显示原型对象和克隆对象的状态。

相关推荐
sunny.day1 天前
js原型与原型链
开发语言·javascript·原型模式·js原型链
UXbot2 天前
AI网页开发工具能替代工具吗?5大平台对比
前端·人工智能·低代码·ui·原型模式·web app
weixin_307779132 天前
从“大海捞针”到“主动推理”:AI如何重塑云原生故障诊断的根因链
开发语言·人工智能·算法·自动化·原型模式
swordbob2 天前
prototype 注入到 singleton 里,prototype是否还是线程安全的
安全·spring·单例模式·原型模式
isNotNullX3 天前
企业数据中台建设,ETL工具选错了会踩哪些坑?
数据仓库·etl·原型模式
半个烧饼不加肉3 天前
JS 底层探究-- 普通函数和构造函数
开发语言·javascript·原型模式
折哥的程序人生 · 物流技术专研5 天前
Java 23 种设计模式:从踩坑到精通 | 原型模式 —— 克隆对象,深拷贝与浅拷贝的坑你踩过吗?
java·设计模式·架构·原型模式·单一职责原则
ourenjiang6 天前
【学习设计模式】原型模式
学习·设计模式·原型模式
迷藏4948 天前
Python+DuckDB:轻量级BI流水线实战
java·开发语言·python·原型模式
J2虾虾12 天前
Spring AI Alibaba - 检索增强生成(RAG)
人工智能·spring·原型模式