介绍
原型模式的核心是一个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++设计模式
最新评论
pytz 不对,不要用那个。
我的WordPress没有设置 -p ,Nginx设置了link,但是访问的时候显示找不到wp的服务器IP地址,这是怎么回事儿啊?
是普及运用还是往研究方向。此文从我个人角度可以理解及消化,但更期待如何理解并实践的深入指引。可申请版权型的总结实践指引哦。
请问博主,这些书你都会看吗
收获源于分享
eee
LIBS += -LD:/my_program_design/dll_test/test_library_by_header/ -llibrary,不明白
Спасибо за информацию!!!!!