一、概念
创建型模式,一个工厂类根据传入的类型参数,动态创建该产品类。
二、应用场景
像玩具工厂类接收玩具名称参数后动态创建该玩具类。
计算器的算术工厂类接收具体的运算符类型后,创建该算术类。
三、优缺点
优点:客户端无需关心具体产品如何创建与组织,仅需知道具体产品所对应的参数即可。
缺点:工厂类一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂(成百上千个产品的创建都在这里,代码庞大等等)。
四、如何写一个简单工厂类
1、创建抽象玩具类
// 玩具接口
class Toy
{
public:
virtual string Name() = 0; // 玩具名称
};
2、创建具体玩具类
// 玩具汽车
class CarToy : public Toy
{
public:
string Name() {return "Car.";}
};
// 玩具飞机
class PlaneToy : public Toy
{
public:
string Name() {return "Plane.";}
};
3、创建玩具工厂
// 玩具工厂
class ToyFactory
{
public:
enum Toy_TYPE {
CAR_TOY, // 玩具汽车
PLANE_TOY // 玩具飞机
};
Toy* CreateToy(Toy_TYPE type) {
Toy *toy = NULL;
switch(type) {
case CAR_TOY:
toy = new CarToy();
break;
case PLANE_TOY:
toy = new PlaneToy();
break;
default:
break;
}
return toy;
}
};
4、实现
int main()
{
ToyFactory *toyFactory = new ToyFactory();
Toy *carToy = toyFactory->CreateToy(ToyFactory::CAR_TOY);
cout << carToy->Name() << endl;
Toy *planeToy = toyFactory->CreateToy(ToyFactory::PLANE_TOY);
cout << planeToy->Name() << endl;
return 0;
}