策略模式

2019-03-26  本文已影响0人  _fan凡

策略模式(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.所有策略类都需要对外暴漏,如果不暴露,上层模块不知道有哪些策略,那谈何使用呢?
上一篇下一篇

猜你喜欢

热点阅读