Извлечение расчета бонуса
Следующим шагом мы проделаем похожую вещь с расчетом бонуса. Правила расчета
зависят от типа фильма, хотя здесь меньше вариантов, чем при расчете
задолженности. Похоже, что стоит перенести ответственность за это в класс
Rental. Сначала применим к коду ответственному за расчет бонуса рифэкторинг
Extract Method (110).
public String statement() {
double totalAmount = 0;
int frequentRenterPoints = 0;
Enumeration rentals = this.rentals.elements();
String result = "Rental Record for "+getName()+"\n";
while( rentals.hasMoreElements()) {
double thisAmount = 0;
Rental each = ( Rental) rentals.nextElement();
// add frequent renter points
frequentRenterPoints++;
// add bonus for a two day new release rental
if( each.getMovie().getPriceCode()==Movie.NEW_RELEASE &&
each.getDaysRented()>1) frequentRenterPoints++;
// show figures for this rental
result += "\t"+each.getMovie().getTitle()+"\t"+
String.valueOf( each.getCharge())+"\n";
totalAmount += each.getCharge();
}
// add footer lines
result += "Amount owned is "+String.valueOf( totalAmount)+"\n";
result += "You earned "+String.valueOf( frequentRenterPoints)+
" frequent renter points";
return result;
}
Снова смотрим на то, как используются локальные переменные. Здесь тоже
используется переменная each, которую можно передать параметром метода. Еще
одна переменная, frecuentRenterPoints.
В начало |
предыдущая |
следующая