定义:原型模式是一种创建型设计模式,它允许通过复制(或克隆)一个已经存在的对象来创建一个新的对象,而无需重新实例化它。这通常是通过实现一个原型接口,该接口声明一个克隆方法,然后在具体类中实现这个方法来完成的。
代码:
// 原型基类
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;
}