策略模式

策略模式(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.所有策略类都需要对外暴漏,如果不暴露,上层模块不知道有哪些策略,那谈何使用呢?
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容