策略模式/交通费用 [需要外部给予策略才会就行改变执行函数实现,自身不会进行切换----与状态模式区别]

1 计算接口

/**
 * 计算接口
 */
public interface CalculatorStrategy {
    int calculatePrice(int km);
}

2 公交策略

/**
 * 公交计算策略
 */
public class BusStrategy implements CalculatorStrategy {
    @Override
    public int calculatePrice(int km) {//5公里 1块
        return km / 5 == 0 ? km / 5 : km / 5 + 1;
    }
}

3 地铁策略

/**
 * 地铁策略
 */
public class SubwayStrategy implements CalculatorStrategy {
    @Override
    public int calculatePrice(int km) {
        /*
         * 6 公里1元
         * 超过后3公里1元
         */
        if (km <= 6){
            return 3;
        }else {
            return 3 + (km-6)/3;
        }
    }
}

4 当前策略 扮演Context环境

/**
 * 扮演Contex角色,负责当前策略
 */
public class TranficCalculator {
    private CalculatorStrategy calculatorStrategy;
    public TranficCalculator(CalculatorStrategy calculatorStrategy){
        this.calculatorStrategy = calculatorStrategy;
    }

    //设置改变策略
    public void setCalculatorStrategy(CalculatorStrategy calculatorStrategy){
        this.calculatorStrategy = calculatorStrategy;
    }
    //计算
    public int calculatePrice(int km){
        return calculatorStrategy.calculatePrice(km);
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值