策略模式及其重构场景

https://guisu.blog.csdn.net/article/details/7558249

如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个具体的查找算法;当然也可以将这些查找算法封装在一个统一的方法中,通过if…else…或者case等条件判断语句来进行选择。这两种实现方法我们都可以称之为硬编码

  • 硬编码增加新功能 违反开闭原则
  • 算法(策略)现在与对象耦合在一起 如何将对象和算法分离开 使算法与客户端分离开来
策略模式很像工厂模式

只不过工厂模式是创建型设计模式,工厂接口声明创建+返回的对象是谁 延迟到子类实现
策略模式是行为型,主攻对象的行为方法 业务逻辑,策略接口声明API行为方法 延迟到子类实现功能流程

工厂类在客户端直接多态创建工厂接口 调用方法
策略模式要多加一个环境类 将策略接口维护起来 构造函数里多态的接收策略子类
客户端要调用环境类

策略模式对于if else 等多条件表达式的修改也很像简单工厂模式的修改
简单工厂模式 中就是if type.equals(kind){ return product;} 我们为之升级将kind变成工厂子类 还有抽象工厂类
策略模式也一样的把if type.equals(kind){ obj.doSomething();}升级 把策略定为接口 所有的其他具体的策略为实现类

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值