| Замена условной логики на полиморфизм | Страница 35 |
class Movie...
public double getCharge( int daysRented) {
double result = 0;
switch( getPriceCode()) {
case Movie.REGULAR:
result += 2;
if( daysRented>2)
result += ( daysRented-2)*1.5;
break;
case Movie.NEW_RELEASE:
result += daysRented*3;
break;
case Movie.CHILDRENS:
result += 1.5;
if( daysRented>3)
result += ( daysRented-3)*1.5;
break;
}
return result;
}
Придётся передавать в параметрах метода продолжительность аренды, которая
хранится в классе Rental. Метод пользуется данными о длительности
аренды и типе фильма. Почему более предпочтительно передавать длительность
аренды в класс Movie, чем тип фильма в класс Rental?
Дело в том, что планируемые изменения касаются именно добавления новых типов.
Информация о типах будет меняться еще и еще, поэтому для того, чтобы избежать
в будущем необходимости исправления кода в нескольких местах сразу, удобнее
собрать весь чувствительный к подобным изменениям код в одном методе класса
Movie.
Перенесем метод в класс Movie и изменим getCharge,
чтобы использовался новый метод
class Rental...
public double getCharge() {
return movie.getCharge( daysRented);
}
Оглавление | << страница 34 | страница 36 >>