介绍
原型模式的核心是一个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++设计模式
Techie亮博客,转载请注明:Coologic » C++设计模式-原型模式
Coologic 博客域名已更改,已从 www.techieliang.com 改为
www.coologic.cn,上述链接地址受到影响,若需查看源文请手动修改,多有不便,敬请谅解。
2926

被折叠的 条评论
为什么被折叠?



