策略模式学习

Broadview 2019-06-28

定义

策略模式是对象行为模式的一种
定义三要素:

  • 一组不同的算法(策略),各有优劣
  • 实现了同一接口,之间可以互相替换
  • 在不同的业务场景下,调用方依据业务决定调用哪种策略(不同的场景下对同一行为有不同的实现)

uml类图

策略模式学习

优缺点

优点:

  • 易于切换(李氏替换原则)
    由于策略类都实现同一个接口,所以使它们之间可以自由切换。
  • 易于扩展(开闭原则)
    增加一个新的策略只需要添加一个具体的策略类即可,基本不需要改变原有的代码,符合“开闭原则“
  • 提供了管理相关的算法族的办法。
  • 提供了可以替换继承关系的办法。
  • 可以避免使用多重条件转移语句

缺点

  • 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
  • 有可能产生很多策略类,可以通过使用享元模式在一定程度上减少对象的数量

应用场景

以下几种场景

  • 一个系统需要动态地在几种算法中选择一种的情况
  • 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为
  • 如果一个对象有很多的行为,如果不使用合适的模式,这些行为就只好使用多重的if-else语句来实现,此时,可以使用策略模式,把这些行为转移到相应的具体策略类里面,就可以避免使用难以维护的多重条件选择语句,并体现面向对象涉及的概念。
  • 不希望客户端知道复杂的、与算法相关的数据结构,在具体策略类中封装算法和相关的数据结构,提高算法的保密性与安全性。

在jdk中的应用

  • ThreadPoolExecutor中的四种拒绝策略

    • AbortPolicy
    • DiscardPolicy
    • DiscardOldestPolicy
    • CallerRunsPolicy
  • Comparator
  • FilenameFilter

相关推荐