就是定义一系列的算法,把他们一个个封装起来,并且使他们可相互替换,Strategy模式算法可独立于使用它的客户端变化
涉及角色
抽象策略角色:通常用一个抽象类或者接口来实现,主要是定义这个算法所完成的功能
具体策略角色:包装相关算法和行为
环境角色:持有策略类的引用
优点
1> 提供管理相关算法族的办法
2> 提供可替代继承关系的办法
3> 避免使用多重条件判断语句
缺点
1> 客户端必须知道所有的策略类,自己去决定使用哪一个策略类
适用场合
1> 系统有许多类,而他们的区别仅仅在于它们的行为
2> 动态选择几种算法中的一种
3> 一个对象有很多行为
实现步骤
1> 定义抽象角色类,定义好各个实现的共同抽象方法
2> 定义具体策略类,具体实现父类的共同方法
3> 定义环境角色类,私有化申明抽象角色变量,重载构造方法,执行抽象方法
策略模式的应用
1> 如果在一个系统里面有许多类,它们之间的区别仅在于他们的行为,那么使用策略模式可以动态的让一个对象在许多行为中选择一种行为
2> 如果系统需要动态地在几种算法中选择一种,那么这些算法可以包装到一个个的具体算法类里面,而这些算法类都是一个抽象算法类的子类
3> 一个系统的算法使用的数据不可以让客户段知道,策略模式可以避免让客户端涉及到不必要接触到的触发的和只与算法有关的数据