策略模式在Runable接口中的应用分析

计算工资与奖金税率程序。TaxCalaculator类里有计算税率方法。

public class TaxCalaculator {
    //工资
    private final double salary;
    //奖金
    private final double bonus;
    //构造器
    public TaxCalaculator(double salary, double bonus) {
        this.salary = salary;
        this.bonus = bonus;
    }
    //计算税率
    protected double calcTax(){
        return 0.0d;
    };
    public double calcute(){
        return this.calcTax();
    };
    public double getSalary() {
        return salary;
    }
    public double getBonus() {
        return bonus;
    }
}

重写父类计算税率方法,得出结果。

public class TaxCalculatorMain {
    public static void main(String[] args) {
        TaxCalaculator taxCalaculator = new TaxCalaculator(10000d,2000d){
            @Override
            //计算税率方法
            protected double calcTax() {
                return getBonus()*0.1+getSalary()*0.15;
            }
        };
        double calcute = taxCalaculator.calcute();
        System.out.println(calcute);

    }
}

如果改变税率,则税率方法中就会变得很复杂,我们可以专门抽象出计算税率的接口。维护代码容易修改

此接口负责计算税率。

@FunctionalInterface//函数式接口
public interface CalculatorStrategy {
    double caleculate(double salary,double bonus);
}

税率分离,易于修改。

public class simpleCalculatorStrategy implements CalculatorStrategy {
    private final static double SALARY_RATE = 0.1;
    private final static double BOUNS_RATE = 0.15;
    @Override
    public double caleculate(double salary, double bonus) {
        return bonus*SALARY_RATE+salary*BOUNS_RATE;
    }
}

TaxCalaculator类中定义抽象出来计算税率的接口

public class TaxCalaculator {
    //工资
    private final double salary;
    //奖金
    private final double bonus;
    //定义抽象出来计算税率的接口
    private CalculatorStrategy calculatorStrategy;
    public TaxCalaculator(double salary, double bonus) {
        this.salary = salary;
        this.bonus = bonus;
    }
    //调用此接口方法,计算税率
    protected double calcTax(){
        return calculatorStrategy.caleculate(salary,bonus);
    };
    public double calcute(){
      return this.calcTax();
    };
    public void setCalculatorStrategy(CalculatorStrategy calculatorStrategy) {
        this.calculatorStrategy = calculatorStrategy;
    }
}

得出结果。

public class TaxCalculatorMain {
    public static void main(String[] args) {
//        TaxCalaculator taxCalaculator = new TaxCalaculator(10000d,2000d);
//        simpleCalculatorStrategy strategy = new simpleCalculatorStrategy();
//        taxCalaculator.setCalculatorStrategy(strategy);
//        System.out.println(taxCalaculator.calcute());
//两种写法
        TaxCalaculator taxCalaculator = new TaxCalaculator(10000d,2000d);
        //因为式函数式接口,可以使用lambda表达式
        taxCalaculator.setCalculatorStrategy((s,b)->s*0.15+b*0.1);
        System.out.println(taxCalaculator.calcute());
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值