Есть класс
Bill, в которой добавлено поле
TaxType taxType; и метод
payTaxes():
public class Bill {
private double amount;
private TaxType taxType;
private TaxService taxService;
public Bill(double amount, TaxType taxType, TaxService taxService){
this.amount = amount;
this.taxType = taxType;
this.taxService = taxService;
}
public void payTaxes(){
//TODO вместо 0.0 посчитать размер налога исходя из TaxType
double taxAmount = 0.0;
taxService.payOut(taxAmount);
}
}
А так же класс налоговой службы:
public class TaxService {
public void payOut(double taxAmount){
System.out.format("Уплачен налог в размере %.2f%n", taxAmount);
}
}
Ну и базовый класс для различных типов налогообложения:
public class TaxType {
public double calculateTaxFor(double amount){
//TODO override me!
return 0.0;
}
}
И должны быть классы расширяющие
TaxType:
Подоходный налог, = 13% (
IncomeTaxType)
НДС, = 18% (
VATaxType)
Прогрессивный налог, до 100 тысяч = 10%, больше 100 тысяч = 15% (
ProgressiveTaxType)
Ну и метод
main:
public class BillMain {
public static void main(String[] args) {
TaxService taxService = new TaxService();
TaxType taxType = new TaxType();
Bill[] payments = new Bill[]{
//TODO создать платежи с различными типами налогооблажения
};
for (int i = 0; i < payments.length; i++) {
Bill bill = payments[i];
bill.payTaxes();
}
}
}