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);
}
}