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

相关推荐
铛铛啦啦啦25 分钟前
“对象创建”模式之原型模式
设计模式·原型模式
D.eL11 天前
深入解析原型模式:从理论到实践的全方位指南
java·设计模式·原型模式
永生辉皇11 天前
JS红宝书笔记 8.4 类
javascript·笔记·原型模式
胡侃有料11 天前
【设计模式】6.原型模式
设计模式·原型模式
OpenC++12 天前
【C++】原型模式
开发语言·c++·设计模式·原型模式
永生辉皇14 天前
JS红宝书笔记 8.2 创建对象
javascript·笔记·原型模式
杰_happy15 天前
设计模式:原型模式(C++)
c++·设计模式·原型模式
Resurgence0318 天前
原型模式Prototype Pattern
笔记·原型模式
小熊哥^--^21 天前
JavaScript原型,原型链。
原型模式
MessiGo22 天前
Javascript 编程基础(5)面向对象 | 5.2、原型系统
开发语言·javascript·原型模式