策略模式

策略模式

策略模式 #

定义 #

  • 策略模式(Strategy Pattern)
    • 定义了算法族,分别封装起来,让它们之间可以互相替换
    • 此模式让算法的变化独立于使用算法的客户

核心组成 #

  • 策略接口(Strategy Interface)
    • 定义了所有支持的算法的公共接口
  • 具体策略类(Concrete Strategies)
    • 实现策略接口,提供具体的算法实现
  • 上下文(Context)
    • 维护一个对策略对象的引用
    • 可以定义一个接口来让策略对象访问它的数据

应用场景 #

  • 当有多种类似的行为或算法,且需要灵活地在它们之间切换时
  • 当存在多个条件分支,每个分支执行不同的行为时,使用策略模式可以避免使用多重条件选择语句
  • 当一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现时

优点 #

  • 策略模式提供了管理相关的算法族的办法
  • 可以避免使用多重条件转移语句
  • 策略模式提高了算法的保密性和安全性

缺点 #

  • 客户端必须知道所有的策略类,并自行决定使用哪一个策略类
  • 会产生很多的策略类

实例 #

  • 工时单,填报的单位是天或小时,会影响到工时明细列表中的工价计算、单位的显示、最大值(8小时或5天)