1类图
2定义
策略模式定义了一系列的算法,并将每个算法封装起来,而且使他们可以互相替换。策略模式让算法独立与使用它的客户而独立变化。
3应用场景
3.1 针对同一类型问题的多种处理方式,仅仅是具体的行为有差别时。
3.2 需要安全的封装多种同一类型的操作时。
3.3 出现同一个抽象类有多个子类,而又需要使用if-else或者switch-case来选择具体子类时。
4接口
public interface CalculateStrategy {
int calculatePrice(int km);
}
5BusStrategy实现接口
public class BusStrategy implements CalculateStrategy {
@Override
public int calculatePrice(int km) {
int extraTotal = km - 10;
int extraFactor = extraTotal / 5;
int fraction = extraFactor % 5;
int price = 1 + extraFactor * 1;
return fraction > 0 ? ++price : price;
}
}
6SubwayStrategy实现接口
public class SubwayStrategy implements CalculateStrategy {
@Override
public int calculatePrice(int km) {
if(km <= 6)
return 3;
else if(km > 6 && km < 12)
return 4;
else if(km > 12 && km < 22)
return 5;
else if(km > 22 && km < 32)
return 6;
return 7;
}
}
7测试
public class TranficCaluclator {
private CalculateStrategy mStrategy;
public static void main(String[] args) {
TranficCaluclator caluclator = new TranficCaluclator();
caluclator.setmStrategy(new BusStrategy());
System.out.println(caluclator.calculatePrice(16));
}
public void setmStrategy(CalculateStrategy mStrategy) {
this.mStrategy = mStrategy;
}
public int calculatePrice(int km){
return mStrategy.calculatePrice(km);
}
}