设计模式学习——工厂方法模式

之前学过了简单工厂模式,简化了对象的创建,但是为啥又有工厂方法模式?

在简单工厂模式中每增加一种产品就要修改工厂类,工厂类职责过重,简单工厂模式不符合面向对象的设计原则开闭原则——对扩展开放,对修改关闭。

对于之前的 简单工厂模式 :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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欲盖弥彰1314

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值