原型设计模式属于创建型模式。创建方式为通过一个已经存在的对象复制出完全一样的对象。
适用场合为:
1. 构造函数复杂、耗时的对象。2. 对象的当前状态不确定、包含的数据不断变化
举例:
假设我们有这样的需求,我们在ORM框架的设计中,经常会遇到这样的问题,我们在处理某个对象的编辑状态的时候,我们想框架给我们生成的更新数据库的SQL语句,不包含数据列没有发生变化的列,不要出现在更新语句中,这个时候,可能一个方案会是,编辑前克隆一个对象,然后等编辑后提交的时候,生成相应的语句时进行对比之前克隆的对象,看看是否数据发生变化,如果说对象的部分数据列发生变化,那么就只是把变化的数据列进行更新。
对象拷贝时应注意浅复制和深复制的区别
原型设计模式类图:
![](http://www.gddhx.com/upload/%E5%8E%9F%E5%9E%8B%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E7%B1%BB%E5%9B%BE.gif)
c++ demo 如下
#include <stdio.h>
class CProtoType
{
public:
virtual ~CProtoType();
virtual CProtoType* Clone() const=0;
protected:
CProtoType();
};
class ConcretePrototype:public CProtoType
{
public:
ConcretePrototype(){printf("ConcreteProtoType Constructor\n");};
ConcretePrototype(const ConcretePrototype& protoType){printf("ConcreteProtoType Copy Constructor\n");};
virtual CProtoType* Clone() const{return new ConcretePrototype(*this);};
protected:
private:
};
int main(int argc, char* argv[])
{
CProtoType* pt=new ConcretePrototype();
CProtoType* pt2=pt->Clone();
getchar();
return 0;
}