// 简单工厂_工厂方法_抽象工厂.cpp :
//
#include "stdafx.h"
#include <string>
using namespace std;
class Fruit
{
public:
Fruit()
{
printf("Fruit\n");
}
virtual ~Fruit()
{
printf("~Fruit\n");
}
};
class Banana :public Fruit
{
public:
Banana()
{
printf("Banana\n");
}
~Banana()
{
printf("~Banana\n");
}
};
class Apple :public Fruit
{
public:
Apple()
{
printf("Apple\n");
}
~Apple()
{
printf("~Apple\n");
}
};
class Orange :public Fruit
{
public:
Orange()
{
printf("Orange\n");
}
~Orange()
{
printf("~Orange\n");
}
};
class Factory
{
public:
virtual Fruit* CreateProduct() = 0;
virtual ~Factory()
{
printf("~Factory\n");
}
};
class AppleFactory :public Factory
{
public:
Fruit* CreateProduct()
{
return new Apple();
}
~AppleFactory()
{
printf("~AppleFactory\n");
}
};
class BananaFactory :public Factory
{
public:
Fruit* CreateProduct()
{
return new Banana();
}
~BananaFactory()
{
printf("~BananaFactory\n");
}
};
class OrangeFactory :public Factory
{
public:
Fruit* CreateProduct()
{
return new Orange();
}
~OrangeFactory()
{
printf("~OrangeFactory\n");
}
};
int main(int argc, _TCHAR* argv[])
{
//用户只面向 Factory 和 Fruit这两个抽象
Factory * f = new OrangeFactory();
Fruit *fruit = f->CreateProduct();
delete f;
delete fruit;
}