**定义:**原型模式是一种创建型设计模式,它允许通过复制(或克隆)一个已经存在的对象来创建一个新的对象,而无需重新实例化它。这通常是通过实现一个原型接口,该接口声明一个克隆方法,然后在具体类中实现这个方法来完成的。
代码:
cpp
// 原型基类
class Prototype {
public:
virtual ~Prototype() = default;
virtual std::shared_ptr<Prototype> clone() const = 0; // 纯虚函数,要求派生类实现
virtual void show() const = 0; // 用于展示对象状态的纯虚函数
};
// 具体原型1
class ConcretePrototype1 : public Prototype {
private:
std::string name;
public:
ConcretePrototype1(const std::string& n) : name(n) {}
std::shared_ptr<Prototype> clone() const override {
return std::make_shared<ConcretePrototype1>(*this); // 浅拷贝
}
void show() const override {
std::cout << "ConcretePrototype1 name: " << name << std::endl;
}
};
// 具体原型2
class ConcretePrototype2 : public Prototype {
private:
int value;
public:
ConcretePrototype2(int v) : value(v) {}
std::shared_ptr<Prototype> clone() const override {
return std::make_shared<ConcretePrototype2>(*this); // 浅拷贝
}
void show() const override {
std::cout << "ConcretePrototype2 value: " << value << std::endl;
}
};
int main() {
std::shared_ptr<Prototype> proto1 = std::make_shared<ConcretePrototype1>("Prototype1");
std::shared_ptr<Prototype> proto2 = std::make_shared<ConcretePrototype2>(42);
proto1->show();
proto2->show();
// 克隆对象
std::shared_ptr<Prototype> clone1 = proto1->clone();
std::shared_ptr<Prototype> clone2 = proto2->clone();
clone1->show();
clone2->show();
return 0;
}