计算工资与奖金税率程序。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());
}
}