介绍:策略模式定义一系列算法,并将每个算法封装起来,使它们可以替换使用
结构:
策略接口(规定算法的统一操作)、
具体策略实现类(封装各个算法)、
实现:
1、定义策略接口
public interface CalculateStrategy {
int calculateTrafficFee(int distance);
}
2、定义具体策略实现类
//乘坐公交车算法
public class ByBus implements CalculateStrategy {
@Override
public int calculateTrafficFee(int distance) {
return distance<10?4:6;
}
}
//乘坐滴滴快车算法
public class ByDiDiExpress implements CalculateStrategy {
@Override
public int calculateTrafficFee(int distance) {
return distance<3?8:(8+(distance-3)*3);
}
}
//骑共享单车算法
public class BySharedBicycle implements CalculateStrategy {
@Override
public int calculateTrafficFee(int distance) {
return 2;
}
}
3、使用算法
public class TrafficFeeCalculator {
...
public int goToTianJinEye(CalculateStrategy strategy,int distance){
return strategy.calculateTrafficFee(distance);
}
}
4、客户端调用
public static void main(String[] args) {
TrafficFeeCalculator calculator=new TrafficFeeCalculator();
System.out.println(String.format("乘坐公交车到天津之眼的花费为:%d块人民币",
calculator.goToTianJinEye(new ByBus(),10)));
}
优点:程序扩展性可维护性增强,降低算法类的职责。
策略模式是通过不同算法做同一件事;命令模式是通过不同命令做不同事。