设计模式-策略模式

2017-11-08  本文已影响0人  __ming

最近学习设计模式,特此记录下来。

1.策略模式简介

2.定义

3.使用场景

策略模式的UML类图

![%Q]E}MZB])HYC16_9J1ZBA0.png](https://img.haomeiwen.com/i4314442/600309f5d6483c46.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

4.策略的简单实现。

public interface CalculatorStragety {
    /**
     * 按距离来计算价格
     * @param km  距离
     * @return  返回价格
     */
    int calculator(int km);
}

public class Busstrategy implements CalculatorStragety {
    @Override
    public int calculator(int km) {
        int extraTotl = km-10;
        int extroFactor = extraTotl /5;
        int fraction = extraTotl % 5;
        int price = 1 + extroFactor*1;
        return fraction > 0 ? ++price: price ;
    }
}

public class Subwaytrategy implements CalculatorStragety {

    @Override
    public int calculator(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;
        }else {
            return 7;
        }
    }
}
public class Pricecalculator implements CalculatorStragety {    
    private CalculatorStragety stragety;

    public static void main(String[] args) {
        Pricecalculator culator = new Pricecalculator();
                // 设置价格策略 Busstrategy
        culator.setStragety(new Busstrategy());
        System.out.println("calculator resutl = "+culator.calculator(30));
                // 设置价格策略 Subwaytrategy
        culator.setStragety(new Subwaytrategy());
        System.out.println("calculator resutl = "+culator.calculator(30));
    }
    public void setStragety(CalculatorStragety stragety) {
        this.stragety = stragety;
    }
    @Override
    public int calculator(int km) {
        return this.stragety.calculator(km);
    }
}

总结

上一篇 下一篇

猜你喜欢

热点阅读