定义:定义一个工厂类,他可以根据参数的不同返回不同类的实例
在简单工厂模式中用于被创建实例的方法通常为静态(static)方法,因此简单工厂模式又被成为静态工厂方法(Static Factory Method)
需要什么,只需要传入一个正确的参数,就可以获取所需要的对象,而无需知道其实现过程
假设有一个工厂,他能生产出A、B两种产品。当客户需要产品的时候一定要告诉共产是哪种产品,是A还是B。当新增加一种新产品的时候,那么就要去修改工厂的类。 

 

#include <iostream>
#include <windows.h>
using namespace std;

enum E_CAR_TYPE
{
E_CAR_TYPE_BENZ = 1, // 奔驰
E_CAR_TYPE_BMW = 2, // 宝马
};

class Car
{
public:
virtual void CreateCar(void) = 0;
};

class BenzCar :public Car // 奔驰车
{
public:
BenzCar()
{
cout <<"BenzCar::Benz()" << endl;
}
virtual void CreateCar(void)
{
cout <<"BenzCar::CreateBenz Car" << endl;
}

~BenzCar()
{

}
};

class BmwCar :public Car // 宝马车
{
public:
BmwCar()
{
cout <<"BmwCar:Car" << endl;
}
virtual void CreateCar(void)
{
cout << "BmwCar::CreateBmw Car" << endl;
}
};

class Facory
{
public:
Car *CreateSpecifiCar(E_CAR_TYPE eType)
{
Car *pCar = NULL;
switch(eType)
{
case E_CAR_TYPE_BENZ: // 奔驰
{
pCar = new BenzCar();
}
break;
case E_CAR_TYPE_BMW: // 宝马
{
pCar = new BmwCar();
}
break;
default:
break;
}

return pCar;
}
};

int main()
{
Facory mFactory;
Car* mpCarOne = mFactory.CreateSpecifiCar(E_CAR_TYPE_BENZ);
Car* mpCarTwo = mFactory.CreateSpecifiCar(E_CAR_TYPE_BMW);

mpCarOne->CreateCar();
mpCarTwo->CreateCar();

delete mpCarOne;
delete mpCarTwo;

system("pause");
return 0;
}