17策略与模板方法模式

策略模式(Strategy Pattern)

  • 定义:定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法可以独立于使用它的客户变化。

    1. 对象行为型模式
    2. 又称为政策(Policy)模式
    3. 每一个封装算法的类称之为策略(Strategy)类
    4. 策略模式提供了一种可插入式(Pluggable)算法的实现方案
  • 简单结构:3个角色

    1. Context(环境类)
    2. Strategy(抽象策略类)
    3. ConcreteStrategy(具体策略类)
  • UML

  • 优缺点:

    1. 优点:
      • 提供了对开闭原则的完美支持
      • 提供了管理相关的算法族的办法
      • 提供了一种可以替换继承关系的办法
      • 可以避免多重条件选择语句
      • 提供了一种算法的复用机制,不同的环境类可以方便地复用策略类
    2. 缺点:
      • 客户端必须知道所有的策略类,并自行决定使用哪一个策略类
      • 将造成系统产生很多具体策略类
      • 无法同时在客户端使用多个策略类
  • 适用环境:

    1. 一个系统需要动态地在几种算法中选择一种
    2. 避免使用难以维护的多重条件选择语句
    3. 不希望客户端知道复杂的、与算法相关的数据结构,提高算法的保密性与安全性

模板方法模式

  • 定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类不改变一个算法的结构即可重定义该算法的某些特定步骤。

    1. 类行为型模式,是一种基于继承的代码复用技术
    2. 将一些复杂流程的实现步骤封装在一系列基本方法中
    3. 相同的算法框架可以有不同的执行结果
  • 简单结构:2个角色

    1. AbstractClass(抽象类)
    2. ConcreteClass(具体子类)
  • UML

  • 优缺点:

    1. 优点:
      • 在父类中定义一个算法,在子类实现算法时并不会改变算法中步骤的执行次序
      • 提取了类库中的公共行为,将公共行为放在父类中,而通过其子类来实现不同的行为
      • 可实现一种反向控制结构,通过子类覆盖父类的钩子方法来决定某一特定步骤是否需要执行
      • 更换和增加新的子类很方便,符合单一职责原则和开闭原则
    2. 缺点:
      • 需要为每一个基本方法的不同实现提供一个子类,如果父类中可变的基本方法太多,将会导致类的个数增加,系统会更加庞大,设计也更加抽象。
  • 适用环境:

    1. 一次性实现一个算法的不变部分,并将可变的行为留给子类来实现
    2. 各子类中公共的行为应被提取出来,并集中到一个公共父类中,以避免代码重复
    3. 需要通过子类来决定父类算法中某个步骤是否执行,实现子类对父类的反向控制
posted @   vbig  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示
主题色彩