Начнем замену с переменной totalAmount в методе Customer.charge:
  class Customer...
    public String statement()  {
      int frequentRenterPoints = 0;
      Enumeration rentals = this.rentals.elements();
      String result = "Rental Record for "+getName()+"\n";
      while( rentals.hasMoreElements()) {
        Rental each = ( Rental) rentals.nextElement();

        frequentRenterPoints += each.getFrequentRenterPoints();

        // show figures for this rental
        result += "\t"+each.getMovie().getTitle()+"\t"+
                  String.valueOf( each.getCharge())+"\n";
      }

      // add footer lines
      result += "Amount owned is "+String.valueOf( getTotalCharge())+"\n";
      result += "You earned "+String.valueOf( frequentRenterPoints)+
                " frequent renter points";

      return result;
    }

    private double getTotalCharge() {
      double result = 0;
      Enumeration rentals = this.rentals.elements();
      while( rentals.hasMoreElements()) {
        Rental each = ( Rental) rentals.nextElements();
        result += each.getCharge();
      }
      return result;
    }
Это более сложный случай рифэкторинга Replace Temp with Query (120), totalAmount изменяется в цикле, поэтому приходится копировать цикл в новый метод.
В начало | предыдущая | следующая