原型模式( )是一种创建型设计模式,它允许创建对象的副本,而无需知道对象的具体类。这种模式通过克隆现有实例来获得新实例,而不是通过new操作符创建新的对象。这在初始化成本高或者构造过程复杂的场景下特别有用。以下是C++中实现原型模式的一个基本示例:
1.类图
2.定义原型接口
首先,定义一个原型接口,其中包含一个用于克隆自己的方法。
// 原型接口class Prototype {public:virtual ~Prototype() {}virtual std::unique_ptr Clone() const = 0;};
3.实现具体原型类
然后,创建一些具体原型类原型模式,它们继承自接口,并实现Clone方法。
// 具体原型类Aclass ConcretePrototypeA : public Prototype {public:std::unique_ptr Clone() const override {return std::make_unique(*this);}void ShowInfo() const {std::cout << "ConcretePrototypeA instance" << std::endl;}};// 具体原型类Bclass ConcretePrototypeB : public Prototype {public:std::unique_ptr Clone() const override {return std::make_unique(*this);}void ShowInfo() const {std::cout << "ConcretePrototypeB instance" << std::endl;}};
4.客户端代码
客户端可以通过调用Clone方法来创建对象的副本,而不需要关心具体的创建细节。
int main() {std::unique_ptr prototypeA = std::make_unique();std::unique_ptr cloneA = prototypeA->Clone();cloneA->ShowInfo(); // 输出: ConcretePrototypeA instancestd::unique_ptr prototypeB = std::make_unique();std::unique_ptr cloneB = prototypeB->Clone();cloneB->ShowInfo(); // 输出: ConcretePrototypeB instancereturn 0;}
在这个例子中,和都是的子类,并实现了Clone方法,返回一个新的自己类型的对象。客户端通过调用Clone方法就能轻松地创建出原型对象的复制品原型模式,简化了对象的创建过程,特别是在处理复杂对象结构或大量相似对象创建时,原型模式的优势更为明显。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。