ivaneeo's blog

          自由的力量,自由的生活。

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks
          正如我在前面提過的,臨時變量可能是個問題。它們只在自己所屬的函數中有效,所以它們會助長[冗長而復雜]的函數。這里我們有兩個臨時變量,兩者都是用來 從Customer對象相關的Rental對象中獲得某個總量。不論ASCII版或HTML版都需要這些總量。我打算運用Replace Temp with Query(120),并利用所謂的query method來取代totalAmount或frequentRentalPoints這兩個臨時變量。由于class內的任何函數都可以取用(調用)上述所謂query methods,所以它可能夠促進較干凈的設計,而非冗長復雜的函數:

          class Customer...
          public String statement() {
              double totalAmount = 0;
              int frequentRenterPoints = 0;
              Enumeration rentals = _rentals.elements();
              String result = "Rental Record for * " + getName() + "\n";
              while(rentals.hasMoreElements()) {
                 Rental each = (Rental)rentals.nextElement();    //取得一筆租借記錄

               frequentRenterPointers += each.getFrequentRenterPoints();

                    result += "\t" + each.getMovie().getTitle() + "\t" +
                       String.valueOf(each.getCharge()) + "\n";
                    totalAmount += each.getCharge();
              }
          //   add footer lines(結尾打印)
              result += "Amount owed is " + String.valueOf(totalAmount) + " \n";
              result += "You earned " + String.valueOf(frequentRenterPoints) +
                 "frequent renter points";
              return result;
          }

          首先我以Customer class的getTotalCharge()取代totalAmount:
          class Customer...
          public String statement() {
              int frequentRenterPoints = 0;
              Enumeration rentals = _rentals.elements();
              String result = "Rental Record for * " + getName() + "\n";
              while(rentals.hasMoreElements()) {
                 Rental each = (Rental)rentals.nextElement();    //取得一筆租借記錄

               frequentRenterPointers += each.getFrequentRenterPoints();

                    result += "\t" + each.getMovie().getTitle() + "\t" +
                       String.valueOf(each.getCharge()) + "\n";
              }
          //   add footer lines(結尾打印)
              result += "Amount owed is " + String.valueOf(getTotalCharge()) + " \n";
              result += "You earned " + String.valueOf(frequentRenterPoints) +
                 "frequent renter points";
              return result;
          }

          //  譯注:次即query method
          private double getTotalCharge() {
              double result = 0;
              Enumeration rentals = _rentals.elements();
              while(rentals.hasMoreElements()) {
                 Rental each = (Rental)rentals.nextElement();
                 result += each.getCharge();
              }
              return result;
          }
          這并不是Replace Temp with Query(120)的最簡單情況。由于totalAmount在循環(huán)內部被賦值,我不得不把循環(huán)復制到query method中
          posted on 2005-08-15 13:55 ivaneeo 閱讀(226) 評論(0)  編輯  收藏 所屬分類: refactoring-從地獄中重生
          主站蜘蛛池模板: 仁寿县| 鄂尔多斯市| 苍南县| 博野县| 富蕴县| 浦北县| 南华县| 阿坝| 红安县| 天津市| 连平县| 德惠市| 赣榆县| 肇州县| 垣曲县| 旅游| 三穗县| 恩施市| 乌拉特后旗| 乌拉特中旗| 徐水县| 盐池县| 东方市| 浑源县| 牟定县| 建平县| 疏附县| 仪征市| 雷山县| 瑞安市| 唐海县| 莱西市| 垫江县| 石家庄市| 韶山市| 错那县| 桑日县| 庆阳市| 敖汉旗| 奇台县| 达孜县|