原型模式(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 方法来显示原型对象和克隆对象的状态。

相关推荐
我登哥MVP11 天前
走进 Gang of Four 设计模式:访问者模式
java·设计模式·访问者模式·原型模式
学究天人12 天前
数学公理体系大全:第五章 序数与基数理论:超限算术与集合的大小
人工智能·线性代数·算法·机器学习·数学建模·原型模式
学究天人12 天前
数学公理体系大全:第六章 选择公理的等价形式及证明
人工智能·线性代数·算法·机器学习·数学建模·概率论·原型模式
学究天人13 天前
数学公理体系大全:Comprehensive Collection of Mathematical Axiom Systems(补充卷9)
人工智能·线性代数·算法·数学建模·动态规划·原型模式·抽象代数
geovindu14 天前
CSharp: Prototype Pattern
开发语言·后端·设计模式·.net·原型模式·创建型模式
Seven凹凸Man14 天前
WorkBuddy之产品经理原型设计及PRD实战
ai·原型模式
ttod_qzstudio15 天前
【软考设计模式】原型模式:“克隆“对象与深拷贝、浅拷贝精讲
设计模式·原型模式
希冀12319 天前
【JavaScript】Javascript—JS进阶—Day03
开发语言·javascript·原型模式
想吃火锅10051 个月前
【前端手撕】instanceof
前端·javascript·原型模式
UXbot1 个月前
帮助企业低门槛开展AI应用开发的平台推荐
前端·低代码·ui·交互·产品经理·原型模式·web app