C++设计模式之简单工厂模式和策略模式的区别

看到这个UML图回想一下 之前学习过的策略模式

二者好像差不多?

 唯一不同的就是 简单工厂类 和 Context类。


小结:简单工厂类中是根据接收的条件创建一个相应的对象,而 Context 类接收的是一个对象,可以调用方法去执行此对象的方法。


总结简单工厂模式和策略模式

1.从类型上说:简单工厂模式属于创建型模式,而策略模式属于行为型模式。

经典例子:

斧子有很多种,有一个工厂专门负责生产各种需求的斧子。

   
工厂模式:
    1)根据你给出的目的来生产不同用途的斧子,例如要砍人,那么工厂生产砍人斧子,要伐木就生产伐木斧子。
    2)即根据你给出一些属性来生产不同行为的一类对象返回给你。
    3)关注对象创建
  
  策略模式:
    1)用工厂生产的斧子来做对应的事情,例如用砍人的斧子来砍人,用伐木的斧子来伐木。
    2)即根据你给出对应的对象来执行对应的方法。
    3)关注行为的选择


总结:简单工厂模式:根据客户选择的条件,来帮客户创建一个对象。
        策略模式:客户给它一个创建好的对象,它来帮客户做相应的事。


两种模式的优缺点

通过比较客户端的代码发现:
  简单工厂模式:将对象的选择创建交给了简单工厂类,客户端只需要输入相应的条件就可以,不用负责对象的创建,但是需要客户端自己调用算法类的方法。但是一旦需要增加新的运算类,比如开根运算,就要去修改简单工厂类。
  策略模式:对象的选择创建仍需要自己来做,但是将调用方法的职责交给了Context类。一旦需要增加新的策略需要修改客户端。

因此,简单工厂模式的缺点就是当有新的需求增加时,需要频繁的修改工厂类。只用策略模式,当有新的需求增加时需要修改的是客户端,客户端仍然承担着创建对象的职责,并没有减轻客户端的压力。而将这两种模式结合起来使用,则需要修改 Context 类,总之不是完美的。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值