关于这个模式,突然想到了小时候看的《西游记》,齐天大圣孙悟空再发飙的时候可以通过自己头上的3根毛立马复制出来成千上万的孙悟空,对付小妖怪很管用(数量最重要)。Prototype模式也正是提供了自我复制的功能,就是说新对象的创建可以通过已有对象进行创建。在C++中拷贝构造函数(Copy Constructor)曾经是很对程序员的噩梦,浅层拷贝和深层拷贝的魔魇也是很多程序员在面试时候的快餐和系统崩溃时候的根源之一。
Prototype模式提供了一个通过已存在对象进行新对象创建的接口(Clone),Clone()实现和具体的实现语言相关,在C++中我们将通过拷贝构造函数实现之。
Prototype.h
#ifndef __PROTOTYPE_H_
#define __PROTOTYPE_H_
class CPrototype
{
public:
CPrototype();
~CPrototype();
virtual CPrototype* Clone()=0;
};
#endif
Prototype.cpp
#include "Prototype.h"
CPrototype::CPrototype()
{
}
CPrototype::~CPrototype()
{
}
ConcretePrototype.h
#ifndef _CONCRETEPROTOTYPE_H_
#define _CONCRETEPROTOTYPE_H_
#include "Prototype.h"
class CConcretePrototype:public CPrototype
{
public:
CConcretePrototype();
CConcretePrototype(CConcretePrototype* pCpro);
~CConcretePrototype();
CPrototype* Clone();
private:
};
#endif
ConcretePrototype.cpp
#include "ConcretePrototype.h"
#include <iostream>
using namespace std;
CConcretePrototype::CConcretePrototype()
{
}
CConcretePrototype::~CConcretePrototype()
{
}
CConcretePrototype::CConcretePrototype(CConcretePrototype* pCpro)
{
cout<<"创建对象"<<endl;
}
CPrototype* CConcretePrototype::Clone()
{
cout<<"开始克隆"<<endl;
return new CConcretePrototype(this);
}
Main.cpp
#include <iostream>
#include "Prototype.h"
#include "ConcretePrototype.h"
using namespace std;
int main()
{
CPrototype *pCP=new CConcretePrototype;
pCP->Clone();
delete pCP;
return 0;
}
标签:include,设计模式,CConcretePrototype,模式,CPrototype,拷贝,Prototype,Clone From: https://blog.51cto.com/u_13566975/7272474