原型模式(Prototype Pattern)是一种创建型设计模式,它用于创建对象的复制,同时又能保持对象的封装。原型模式通过复制现有对象的方式来创建新的对象,而无需知道具体创建过程的细节。
在原型模式中,通常会有两种角色:
-
原型接口(Prototype Interface):声明了一个用于克隆自身的接口,这样所有具体原型类都必须实现该接口。
-
具体原型(Concrete Prototype):实现了原型接口,负责对自身进行克隆。
#include <iostream>
#include <string>
// 原型接口
class Prototype {
public:
virtual Prototype* clone() = 0;
virtual void setProperty(const std::string& value) = 0;
virtual std::string getProperty() const = 0;
};
// 具体原型
class ConcretePrototype : public Prototype {
private:
std::string property;
public:
Prototype* clone() override {
ConcretePrototype* cloned = new ConcretePrototype();
cloned->setProperty(this->property);
return cloned;
}
void setProperty(const std::string& value) override {
property = value;
}
std::string getProperty() const override {
return property;
}
};
int main() {
// 创建原型对象
ConcretePrototype* original = new ConcretePrototype();
original->setProperty("Original Property");
// 克隆原型对象
ConcretePrototype* cloned = dynamic_cast<ConcretePrototype*>(original->clone());
// 修改克隆对象的属性
cloned->setProperty("Cloned Property");
// 输出属性值
std::cout << "Original Property: " << original->getProperty() << std::endl;
std::cout << "Cloned Property: " << cloned->getProperty() << std::endl;
delete original;
delete cloned;
return 0;
}
/*
在这个示例中,Prototype 是原型接口,ConcretePrototype 是具体原型类。通过原型模式,我们可以使用原型对象来克隆出新的对象,并且可以修改克隆对象的属性,而不影响原型对象本身。
原型模式适用于需要创建大量相似对象且创建过程比较昂贵或复杂的情况。通过原型模式,我们可以通过复制已有对象来创建新对象,而无需重复执行创建过程的开销。
*/
觉得有帮助的话,打赏一下呗。。