之前学过了简单工厂模式,简化了对象的创建,但是为啥又有工厂方法模式?
在简单工厂模式中每增加一种产品就要修改工厂类,工厂类职责过重,简单工厂模式不符合面向对象的设计原则开闭原则
——对扩展开放,对修改关闭。
对于之前的 简单工厂模式 :https://blog.csdn.net/qq_36413982/article/details/107531944 ,
加入要增加一个取模运算就要修改工厂类。
所以又引入了工厂方法模式。
缺点
1、类的个数成倍增加,导致类越来越多,增加维护成本。
2、增加系统的抽象性和理解难度。**
优点
1、不需要记住具体类名,甚至连具体参数都不用记忆
2、实现对象创建和使用分离
3、系统可扩展性变得非常好,不要修改接口和原类。
总的来说, 工厂方法模式
= 简单工厂模式
+ 开闭原则
修改简单工厂模式计算器例子实现工厂方法模式
抽象的运算类工厂
class abstract_operate_fac //工厂类
{
public:
virtual operate *get_operate() = 0;
};
具体运算类工厂实现
//加法运算类工厂
class add_operate_fac : public abstract_operate_fac
{
public:
operate *get_operate();
}
operate *add_operate_fac::get_operate()
{
return new add;
}
//减法法运算类工厂
class sub_operate_fac : public abstract_operate_fac
{
public:
operate *get_operate()
}
operate *sub_operate_fac::get_operate()
{
return new sub;
}
//乘法运算类工厂
class mul_operate_fac : public abstract_operate_fac
{
public:
operate *get_operate()
}
operate *mul_operate_fac::get_operate()
{
return new mul;
}
//除法运算类工厂
class div_operate_fac : public abstract_operate_fac
{
public:
operate *get_operate()
}
operate *div_operate_fac::get_operate()
{
return new div;
}
add_operate_fac add_fac;
operate *add_opr = add_fac.get_operate();
add_opr->num1 = 2;
add_opr->num2 = 3;
add_opr->get_result(add_opr->num1, add_opr->num2);
sub_operate_fac sub_fac;
operate *sub_opr = sub_fac.get_operate();
sub_opr ->num1 = 2;
sub_opr ->num2 = 3;
sub_opr ->get_result(sub_opr ->num1, sub_opr ->num2);