设计模式---原型模式
故事背景:简历复制
概念:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象
Prototype模式提供了一个通过已存在对象进行新对象创建的接口(Clone), Clone()实现和具体的语言相关,在C++中通过拷贝构造函数实现。
代码如下:
#include <cstdio> //接口 class CPrototype { public: CPrototype(){} virtual ~CPrototype(){} virtual CPrototype* Clone() = 0; }; //实现 class CConcretePrototype : public CPrototype { public: CConcretePrototype():m_counter(0){} virtual ~CConcretePrototype(){} //拷贝构造函数 CConcretePrototype(const CConcretePrototype& rhs) { m_counter = rhs.m_counter; } //复制自身 virtual CPrototype* Clone() { //调用拷贝构造函数 return new CConcretePrototype(*this); } private: int m_counter; }; int main(int argc, char **argv) { //生成对像 CPrototype* conProA = new CConcretePrototype(); //复制自身 CPrototype* conProB = conProA->Clone(); delete conProA; conProA=NULL; delete conProB; conProB=NULL; return 0; }
总结:
Prototype模式同工厂模式,同样对客户隐藏了对象的创建工作.
但是,与通过对一个类进行实例化来构造新对象不同的是,原型模式是通过拷贝一个现有对象生成新对象的,
达到了"隔离类对象的使用者和具体类型(易变类)之间的耦合关系"的目的.
原型模式可以很方便的快速构建相同类型的对象.其构造过程有点类似细胞分裂.通过原型模式的克隆接口克隆对象,我们可以完全不关心待克隆对象本身的类型,只需要调用接口就可以产生一个新的同类对象.