策略模式(Strategy)


  1. 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们可以相互替换,使得算法可以在不影响到客户端的情况下发生变化。
  2. 意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
  3. 主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。
  4. 何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为
  5. 如何解决:将这些算法封装成一个一个的类,任意地替换。
  6. 关键代码:实现同一个接口。
  7. 源码实例:android 动画中的插值器,Recyclerview中LayoutManager
  8. 优点: 
    1. 算法可以自由切换。
    2. 避免使用多重条件判断。
    3. 扩展性良好。
  9. 缺点: 
    1. 策略类会增多。
    2. 所有策略类都需要对外暴露。
  10. 使用场景: 
    1. 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。
    2. 一个系统需要动态地在几种算法中选择一种。
    3. 如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。
  11. 角色:
    1. Strategy(策略):负责决定实现策略所必须的接口
    2. ConcreteStrategy:负责实现Strategy角色的接口API,即负责实现具体的策略
    3. Context(上下文):负责使用Strategy角色,Context角色保存了ConcreteStrategy角色的实例,并使用它去实现需求
  12. 类图:

  1. 参考:
    1. https://blog.csdn.net/u012124438/article/details/70039943
    2. https://blog.csdn.net/zhangliangzi/article/details/52161211
    3. http://www.runoob.com/design-pattern/strategy-pattern.html
    4. 图解设计模式
  2. 代码:
    1. https://github.com/wk1995/DesignPattern/tree/master/Strategy


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值