简单工厂模式严格意义上不能算作设计模式
结构
注解:
- 工厂类生成抽象产品类
- 一、二号产品类继承抽象产品类
- 产品类具体实现抽象产品方法
- 实现产品方法中,判断客户类需要的是哪种产品对象
- 客户类创建抽象产品类对象,通过工厂类判断使用哪种产品
实例:
class Factory {
public:
static AbstractProduct* RealizeProduct(int num) {
switch (num) {
case 0:
return new Product1;
break;
case 1:
return new Product2;
break;
}
return NULL;
}
};
class AbstractProduct {
public:
virtual void ProductMethods() = 0;
};
class Product1 :
public AbstractProduct{
virtual void ProductMethods() {
//一号产品的功能
}
};
class Product2 :
public AbstractProduct {
virtual void ProductMethods() {
//二号产品的功能
}
};
class Customer {
public:
void main() {
AbstractProduct* ap;
for (int i = 0; i < 2; i++) {
ap = Factory::RealizeProduct(i);
ap->ProductMethods();
delete ap;
}
}
};
优点
- 客户端和具体实现类解耦
- 不用考虑某些对象创建过程是否比较复杂
缺点
- 增加新的功能是通过修改源代码实现的,不符合开闭原则,所以不能算为设计模式
- 类的职责过重,一旦类出问题,会影响很多使用这个类的模块
适用场景
- 工厂类负责创建的对象比较少,由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂
- 客户端只需要传入工厂类所需要的参数,对于如何创建对象并不关心