介绍
原型模式的核心是一个clone方法,通过该方法进行对象的拷贝 。
优点: 性能优良 ; 逃避构造函数的约束
缺点:每个类都要重写有clone方法,对于以后的类需要全面的考虑所有成员的拷贝
应用: 资源优化场景 、 性能和安全要求的场景 、 一个对象多个修改者的场景
需要有抽象原型和具体原型,抽象原型只需要有虚析构函数和纯虚方法clone即可,有具体原型实现clone方法
注意clone内的操作要深拷贝,对于指针等成员变量不能只copy指针
范例
#ifndef PROTOTYPE_H #define PROTOTYPE_H class Prototype { public: virtual ~Prototype() { } virtual Prototype* Clone() = 0; }; #endif // PROTOTYPE_H #ifndef CONCRETEPROTOTYPE_H #define CONCRETEPROTOTYPE_H #include "prototype.h" class ConcretePrototype : public Prototype { public: ConcretePrototype() {b = new int;} virtual ~ConcretePrototype() {delete b;} virtual Prototype* Clone() override { auto r = new ConcretePrototype; r->a = this->a; //b在构造函数会new,不需要拷贝 return r; } private: int a; int *b; }; #endif // CONCRETEPROTOTYPE_H #include "concreteprototype.h" int main(int argc, char *argv[]) { Prototype *p = new ConcretePrototype(); Prototype *p2 = p->Clone(); }
源码GitHub:CppDesignPattern
相关链接:C++设计模式
最新评论