美文网首页JAVA设计模式
“策略模式”原来如此简单

“策略模式”原来如此简单

作者: 方才兄 | 来源:发表于2019-10-11 15:04 被阅读0次

    一、策略模式简介

    1、定义

    策略模式(Strategy):将一组算法封装起来,使其可以相互替换;同时算法的变化不会影响客户的使用

     2、使用场景

    可以用它来封装几乎任何类型的规则只要在分析过程中听到需要在不同条件下应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性

    3、优缺点

    优点:

    算法可以自由切换

    避免使用多重条件判断(如果不用策略模式我们可能会使用多重条件语句,不利于维护)

    扩展性良好,增加一个策略只需实现接口即可

    缺点:

    策略类数量会增多,每个策略都是一个类,复用的可能性很小

    所有的策略类都需要对外暴露

    3、UML类图

     二、策略模式实现

    1、策略角色

    抽象策略角色,是对策略、算法家族的抽象,通常为接口,定义每个策略或算法必须具有的方法和属性。algorithm是“运算法则”的意思。

    2、具体策略角色

    用于实现抽象策略中的操作,即实现具体的算法,下方用print代替。测试类共3个ConcreteStrategy,其它两个类与ConcreteStrategyA同理,就不再赘述了。

    3、 Context上下文

    Context上下文角色,也叫Context封装角色,起承上启下的作用,屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化。

    4、Client客户端

    运行结果如下:

    这是算法A

    这是算法B

    这是算法C

    5、分析

    可以看出,使用策略模式,当有一个新的算法需求时,只需再增加一个新的算法实现类,更新下client端的选择即可,不会对原有的算法造成影响。

    同时,我们可以很明显的看出,客户端做了很多的判断,这样的程序对客户端是不友好的。下面我们对context进行改造,结合“简单工厂”模式,写出更优的程序。

    三、策略模式与简单工厂结合

    1、改造后的context

    2、改造后的客户端

    可以看到,使用“简单工厂”+ “策略模式” 后,客户端代码更加简洁。同时也使得具体的算法彻底与客户端分离,连算法的父类Strategy都不让客户端认识了。

    简单工厂模式,请阅读参考https://blog.csdn.net/qq_36095679/article/details/89256921

    相关文章

      网友评论

        本文标题:“策略模式”原来如此简单

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