定义
是一种对象行为模式,定义了一些列算法,并对算法进行封装,使得算法的实现与使用相互分割,算法之间能够相互替换。
策略模式的主要角色如下:
抽象策略类 :这是一个抽象角色,通常由一个接口或抽象类实现,此角色给出所有的具体策略类所需的接口;
具体策略类 :实现抽象策略类定义的接口,提供具体的算法实现或行为;
环境类(Context):客户端和策略类的桥梁,使得客户端可以方便的使用各种策略类,而不需要直接与策略类交互。

4+1视图
优缺点
- 优点
- 策略类之间可以自由切换
由于策略类都实现同一个接口,所以使它们之间可以自由切换。 - 易于扩展
增加一个新的策略只需要添加一个具体的策略类即可,基本不需要改变原有的代码,符合"开闭原则" - 避免使用多重条件选择语句(if else),充分体现面向对象设计思想。
- 缺点:
- 客户端必须知道所有的策略类,并自行决定使用哪一个策略类
- 策略模式将造成产生很多策略类,可以通过使用享元模式在一定程度上减少对象的数量。