软件设计 策略模式 Strategy Pattern
准备一组算法,并将每一个算法封装起来,使得它们可以互换
代码实现:
生活中会面临很多抉择,每一个抉择会导向不同的结果,这时就会出现策略的选择。
程序中也是一样,而且更加复杂,生活中的抉择一般只有几个,但程序中可能有十多个甚至数十个,也就是我们常用的 if-else 或者 switch。当只有少量选择时,用这些没有问题,但一旦量比较大,代码的可读性和维护难度会迅速上升,这时候就建议使用策略模式了。
选择出行方式策略,代码实现:
1.接口
public interface TravelStrategy {
void travel();
}
2.接口实现类
public class AirplaneStrategy implements TravelStrategy{
相加相减策略:
这里以相加相减策略来介绍策略模式:
1、定义策略
/**
* 策略
*/
public interface Strategy {
/**
* 运行策略
* @param num1 数字1
* @param num2 数字2
* @return 结果
*/
int doStrategy(int num1, int num2);
}
2、定义相加策略
/**
* 相加策略
*/
public class Add implements Strategy {
优缺点:
优点
1、算法可以自由切换。
2、避免使用多重条件判断。
3、扩展性良好。
缺点
1、策略类会增多。
2、所有策略类都需要对外暴露。
使用场景:
1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。
2、一个系统需要动态地在几种算法中选择一种。
3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。
注意:
如果一个系统的策略多于 4 个,就需要考虑使用混合模式,解决策略类膨胀的问题。
策略模式 与 状态模式 的区别:
可以看出,策略模式的实现方式与前面讲的状态模式非常相似,但它们是有本质区别的。
主要体现在 转换是主动还是被动的。状态模式是由状态自动触发的,是被动的;策略模式是指定策略再执行的,是主动的。
状态模式:状态变(温度),行为就变(水的状态) 双向关联关系
策略模式:状态自己指定(坐高铁),行为(回家,去学校) 单向关联关系

浙公网安备 33010602011771号