Prototype (C++实现)
// Prototype.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
class Prototype
{
public:
Prototype()
{
cout<<"Construction of Prototype"<<endl;
}
virtual ~ Prototype()
{
cout<<"Destruction of Prototype"<<endl;
}
virtual Prototype* Clone()=0;
};
class ConcretePrototype1:public Prototype
{
public:
ConcretePrototype1()
{
cout<<"Construction of ConcretePrototype1"<<endl;
}
ConcretePrototype1( ConcretePrototype1& p1)
{
cout<<"Copy construction of ConcretePrototype1"<<endl;
}
virtual ~ConcretePrototype1()
{
cout<<"Destruction of ConcretePrototype1"<<endl;
}
virtual Prototype* Clone()
{
return new ConcretePrototype1(*this);
}
};
class ConcretePrototype2:public Prototype
{
public:
ConcretePrototype2()
{
cout<<"Construction of ConcretePrototype2"<<endl;
}
ConcretePrototype2( ConcretePrototype2& p1)
{
cout<<"Copy construction of ConcretePrototype2"<<endl;
}
virtual ~ConcretePrototype2()
{
cout<<"Destruction of ConcretePrototype2"<<endl;
}
virtual Prototype* Clone()
{
return new ConcretePrototype2(*this);
}
};
int _tmain(int argc, _TCHAR* argv[])
{
//Client
Prototype *P_Prototype1=new ConcretePrototype1();
Prototype *P_Prototype11=P_Prototype1->Clone();
Prototype *P_Prototype2=new ConcretePrototype2();
Prototype *P_Prototype21=P_Prototype2->Clone();
delete P_Prototype1;
delete P_Prototype11;
delete P_Prototype2;
delete P_Prototype21;
return 0;
}