定于
原型模式是一种创建型设计模式,其核心思想是通过复制现有对象来创建新对象,而不是通过实例化类来创建对象。这种方式可以在不知道具体对象类型的情况下创建新的实例,同时还能够避免耦合性,使得系统更灵活。
在原型模式中,有一个原型对象作为模板,然后通过复制这个原型对象来创建新的对象。这个原型对象必须实现一个能够复制自身的方法。
原型模式允许你避免重新创建和初始化一个对象带来的性能开销,尤其是在对象创建过程复杂或代价高昂的情况下。例如,如果对象的创建涉及大量的资源分配或耗时的计算,那么使用原型模式可以显著提高效率。
原型模式实现
-
定义原型接口 :这个接口通常包含一个克隆方法(
clone
),用于创建对象的副本。 -
实现具体原型类:这些类实现了原型接口,并提供克隆方法的具体实现。
-
创建原型对象:创建原型对象,它包含了需要复制的状态。
-
克隆原型对象:通过调用原型对象的克隆方法来创建新对象。
示例
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
是一个原型接口,它定义了 clone
和 display
方法。ConcretePrototype
是一个具体实现,它包含了 value
成员变量,并提供了 clone
和 display
方法的具体实现。
在 main
函数中,我们创建了一个 ConcretePrototype
对象,并通过调用 clone
方法创建了它的一个副本。然后,我们调用 display
方法来显示原型对象和克隆对象的状态。