// Factory Method.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
//
class Product
{
public:
Product(){}
virtual ~Product(){}
};
class ConcreteProductA:public Product
{
public:
ConcreteProductA()
{
cout<<"Construction of ConcreteProductA"<<endl;
}
virtual ~ConcreteProductA()
{
cout<<"Destrution of ConcreteProductA"<<endl;
}
};
class ConcreteProductB:public Product
{
public:
ConcreteProductB()
{
cout<<"Construction of ConcreteProductB"<<endl;
}
virtual ~ConcreteProductB()
{
cout<<"Destrution of ConcreteProductB"<<endl;
}
};
//
class Factory
{
public:
Factory(){}
virtual ~ Factory(){}
Product* CreateProduct()
{
cout<<"An operation of producting"<<endl;
Product *p=FactoryMenthod();
return p;
}
protected:
virtual Product *FactoryMenthod()=0;
};
class ConcreteFactoryA:public Factory
{
public:
ConcreteFactoryA()
{
cout << "Construction of ConcreteFactoryA"<<endl;
}
virtual ~ ConcreteFactoryA()
{
cout << "Destruction of ConcreteFactoryA"<<endl;
}
protected:
virtual Product *FactoryMenthod()
{
return new ConcreteProductA();
}
};
class ConcreteFactoryB:public Factory
{
public:
ConcreteFactoryB()
{
cout << "Construction of ConcreteFactoryB"<<endl;
}
virtual ~ ConcreteFactoryB()
{
cout << "Destruction of ConcreteFactoryB"<<endl;
}
protected:
virtual Product *FactoryMenthod()
{
return new ConcreteProductB();
}
};
int _tmain(int argc, _TCHAR* argv[])
{
Factory *f1=new ConcreteFactoryA();
Product *p1=f1->CreateProduct();
delete p1;
delete f1;
Factory *f2=new ConcreteFactoryB();
Product *p2=f2->CreateProduct();
delete p2;
delete f2;
return 0;
}