美文网首页
策略模式

策略模式

作者: MrSYLong | 来源:发表于2021-02-07 09:51 被阅读0次
    定义

    策略模式(Strategy Pattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。

    适用场景

    有时候在实现某一个功能的时候可能会有多个方案:我们需要让系统可以动态灵活地更换方案;而且也能够让开发者方便地增加新的方案或删除旧的方案。

    如果我们将所有的方案硬编码在同一个类中,那么在今后修改,添加,删除某个方案的时候就会改动原有类,这是违反开闭原则的。

    其实我们可以定义一些独立的类来封装不同的解决方案,每一个类封装一个具体的方案,这些不同的方案就是我们所说的策略。而且我们可以用一个抽象的策略类来保证这些策略的一致性,这就是策略模式的设计方案。

    现在我们清楚了策略模式的适用场景,下面看一下策略模式的成员和类图。

    成员

    策略模式除了客户端之外共有三个成员:

    环境类(Context):环境类内部持有一个具体策略类的实例,这个实例就是当前的策略,可以供客户端使用

    抽象策略类(Strategy):抽象策略类声明具体策略类需要实现的接口,这个接口同时也是提供给客户端调用的接口

    具体策略类(Concrete Strategy):具体策略类实现抽象策略类声明的接口,每个具体策略类都有自己独有的实现方式,即代表不同策略

    下面我们通过类图来看一下各个成员之间的关系。


    image
    image
    优点

    策略模式遵循开闭原则,用户可以在不修改原有系统的前提下选择和更换算法

    避免使用多重条件判断

    可以灵活地增加新的算法或行为

    提高算法和策略的安全性:可以封装策略的具体实现,调用者只需要知道不同策略之间的区别就可以

    缺点

    客户端必须知道当前所有的具体策略类,而且需要自行决定使用哪一个策略类

    如果可选的方案过多,会导致策略类数量激增。

    转自

    面向对象设计的设计模式(十四):策略模式

    相关文章

      网友评论

          本文标题:策略模式

          本文链接:https://www.haomeiwen.com/subject/ygsvwctx.html