简单工厂模式
主要用于创建对象,新添加类时,不会影响以前的系统代码。核心思想是用一个工厂来根据输入的条件产生不同的类,根据不同类的virtual函数得到不同的结果。适用于不同情况创建不同的类时,客户端必须知道基类和工厂类,耦合性不好。
#include <iostream>
using namespace std;
enum CTYPE { PA=1, PB };
//基类
class Product
{
public:
Product() {}
virtual ~Product() {}
public:
virtual void operation() = 0;
};
//产品A
class ProductA :public Product
{
public:
ProductA() {}
virtual ~ProductA() {}
public:
void operation() { cout << "ProductA" << endl; }
};
//产品B
class ProductB :public Product
{
public:
ProductB() {}
virtual ~ProductB() {}
public:
void operation() { cout << "ProductB" << endl; }
};
//工厂
class Factory
{
public:
static Product * CreatProduct(CTYPE ctype)
{
if (ctype == PA) //工厂内部判断
return new ProductA(); //生产产品A
else if (ctype == PB)
return new ProductB(); //生产产品B
else
return NULL;
}
};
int main()
{
Product * pf = Factory::CreatProduct(PA);//要这样写,就需要在声明处+ static
pf->operation();
Product * pf = Factory::CreatProduct(PB);
pf->operation();
return 0;
}
这样设计的缺点,就是要增加新的核类型时,就需要修改工厂类。这就违反了开放封闭原则:软件实体(类、模块、函数)可以扩展,但是不可修改。
简单工厂模式图: