策略模式

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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章