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

相关推荐
It'sMyGo30 分钟前
Javascript数组研究09_Array.prototype[Symbol.unscopables]
开发语言·javascript·原型模式
BIGSHU09233 天前
GPT带我学-设计模式16-原型模式
gpt·设计模式·原型模式
刷帅耍帅3 天前
设计模式-原型模式
设计模式·原型模式
It'sMyGo5 天前
javascript手写实现instanceof函数 介绍判断数组的方法
开发语言·javascript·原型模式
SunnyRivers8 天前
原型设计模式
原型模式
liang89998 天前
设计模式之原型模式
java·设计模式·原型模式
前端李易安13 天前
JavaScript 原型与原型链的特点,使用场景及案例
开发语言·javascript·原型模式
仙魁XAN14 天前
Unity 设计模式 之 创建型模式 -【单例模式】【原型模式】 【建造者模式】
unity·单例模式·设计模式·建造者模式·原型模式
学步_技术16 天前
Python编码系列—Python原型模式:深克隆与高效复制的艺术
开发语言·python·原型模式
yiyiy111yiy23 天前
关于Harmony的学习
前端·javascript·学习·原型模式