Замена условной логики на полиморфизмСтраница 35

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

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


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



Оглавление | << страница 34 | страница 36 >>