美文网首页
策略模式

策略模式

作者: _fan凡 | 来源:发表于2019-03-26 23:52 被阅读0次

    策略模式(Strategy pattern),也叫政策模式(Policy Pattern),其定义如下:

    Define a family of algorithms,encapsulate each one,and make them interchangeable.

    定义一组算法,并对每个算法进行封装,并且每个算法之间可以互换。

    策略模式就是单纯的使用了面向对象中的继承和多态,通用类图如下:

    4.png

    三个角色分别为:

    1.Context封装角色:俗称上下文角色,屏蔽高层模块对策略、算法的直接访问。该类不需要实现或者继承Strategy接口或者抽象类。
    
    2.Strategy抽象策略角色:策略算法家族的抽象,通常为接口。定义每个策略和算法必须具有的方法和属性。
    
    3.ConcreteStrategy具体策略角色:实现抽象策略中的操作,算法具体由该类实现。
    

    感觉策略模式和代理模式很相像,其实从通用类图来看的话确实非常像,区别就是:

    策略模式的封装类不用实现Strategy的接口,而代理模式的代理类需要实现Subject的接口。

    策略模式的优点:

    1.算法可以自由切换,只要将算法告诉封装类即可。
    
    2.避免使用多重条件判断,直接告诉使用哪个策略,或者使用枚举来进行分流更好
    
    3.扩展性良好,有新的策略,只需要实现Strategy接口即可。
    

    策略模式的缺点:

    1.一个策略一个类,导致策略类增多。
    
    2.所有策略类都需要对外暴漏,如果不暴露,上层模块不知道有哪些策略,那谈何使用呢?
    

    相关文章

      网友评论

          本文标题:策略模式

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