設計モードのPrototypeモード

2175 ワード

このパターンについては、子供の頃に見た『西遊記』をふと思い出し、斉天大聖孫悟空がまた暴れたときに自分の頭の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;
}