Вы уже определили, что методы printPayments()
, printFirstPayment()
и printLastPayment()
имеют общую логику. Как правило, вы хотите минимизировать дублирование такого кода, и для этого есть два способа:
Реализуйте все, кроме одного, в терминах одного из них; или
Реализация всех методов в терминах частного метода.
Так, например:
public void printPayments() {
for (Payment : getPayments()) {
printPayment(payment);
}
}
public void printFirstPayment() {
printPayment(getPayments().get(0));
}
public void printLastPayment() {
List<Payment> payments = getPayments();
printPayment(payments.get(payments.size()-1));
}
private void printPayment(Payment payment) {
...
}
private List<Payment> getPayments() {
...
}
Теперь это домашнее задание, поэтому вы, возможно, еще не сталкивались с синтаксисом List<Payment>
. Если нет, то это дженерики. Есть и другие способы сделать это: использовать неуниверсальный Collection
или, например, использовать массивы.
Вот что я хотел проиллюстрировать:
Логика создания и отображения платежей отделена;
Один метод getPayments()
выполняет вычисления и возвращает List
из Payment
объектов. Payment
- новый объект в этом макете;
Все три метода реализованы в терминах getPayments()
и printPayment()
.
Так что я надеюсь, что это приведет вас в правильном направлении. Я предполагаю, что концепция функциональная композиция , сочетающая ваши функции в терминах других функций и делающая ваши внутренние функции достаточно гранулированными, чтобы с пользой сгруппироваться.