示例:
    image.png
    好处

    • 添加新算法时,不需要更改和重新编译现有的排序类层次结构
    • 修改算法时,排序层次结构中剩余的类不需要更改和重新编译
    • 客户机类和实现类都依赖于抽象接口

    image.png
    context

    • 配置了一个具体的策略对象。
    • 维护对策略对象的引用。
    • 可以定义一个接口,让策略访问它的数据
    • image.png

    何时使用

    • 当你要处理一些仅仅行为不同的相关的类的时候
    • 当你要隐藏实现细节的时候
    • 当你要取消许多条件语句的时候

    Context**的实现方式**

    • 当某算法被调用时,Context类将Strategy类所需要的所有数据一次性地传递完毕
      • image.png
    • Context将自己作为一个对象传递给Strategy类,然后Strategy类再利用该对象反过来调用Context类,以便获得某些数据与功能
      • image.png

    通常情况下策略模式的交互

    1. 客户通常创建一个具体策略的对象(ConcreteStrategy)并将其传递给context;
    2. context将客户的请求转发给策略。
    3. 客户只与context进行交互。

    image.png
    策略模式优点
    定义可重用的相关算法

    • 相关算法的系列。StrategyClass的层次结构定义了一系列用于上下文重用的算法或行为。
    • 继承可以帮助分解出算法的公共功能

    易于扩展

    • 将算法封装在单独的策略类中,可以独立于上下文更改算法,使其更易于理解、切换(更改为更有效的算法)扩展。

    策略模式的缺点

    • 客户必须知道不同的策略。
      • 客户在选择合适的策略之前必须了解策略的不同之处

    实例
    image.png
    image.png
    image.png
    image.png
    image.png