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

相关推荐
小马哥编程10 小时前
原型链(Prototype Chain)入门
css·vue.js·chrome·node.js·原型模式·chrome devtools
浮游本尊4 天前
对象、函数、原型之间的关系
开发语言·javascript·原型模式
越甲八千4 天前
重拾设计模式--原型模式
设计模式·原型模式
小嘟嚷ovo4 天前
String.prototype.padStart() 方法来实现日不足两位时补充零
原型模式
抓哇FullStack-Junior6 天前
设计模式——原型模式
java·开发语言·设计模式·原型模式
shi57836 天前
设计模式之 原型模式 C# 范例
设计模式·c#·原型模式
会思想的苇草i8 天前
JavaScript--原型与原型链
开发语言·前端·javascript·设计模式·原型·原型模式·原型链
tester Jeffky10 天前
JavaScript 原型对象与原型链的魔法与艺术
开发语言·javascript·原型模式
橘子味的冰淇淋~11 天前
js 怎么判断对象是否具有某个属性及各方法的区别
原型模式
犬余12 天前
设计模式之原型模式:深入浅出讲解对象克隆
笔记·学习·设计模式·原型模式