Это приводит нас к тому, что метод getCharge должен быть перенесен в класс Movie.
  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. Метод пользуется данными о длительности аренды и о типе фильма. Почему здесь более предпочтительно передавать параметром метода длительность аренды, чем тип фильма в класс Rental? Дело в том, что планируемые изменения касаются только добавления новых типов. Информация о типах имеет тенденцию быть более непостоянной. Если будет изменен тип фильма, то хотелось бы избежать эффекта кругов на воде и внесения изменений сразу в несколько мест, таким образом, лучше считать задолженность в классе Movie.

Перенесем метод в класс Movie и изменим getCharge, чтобы использовался новый метод (Рис 1.12 и 1.13)

  class Rental...
    public double getCharge() {
      return movie.getCharge( daysRented);
    }

В начало | предыдущая | следующая