策略模式

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) {
        // TODO Auto-generated method stub
        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) {
        // TODO Auto-generated method stub
        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);
    }


}
發佈了51 篇原創文章 · 獲贊 12 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章