ivaneeo's blog

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

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks
          提取[常客積點計算]代碼
          首先我們需要針對[常客積點計算]這部分代碼(以下粗體部分)運用Extract Method(110)重構(gòu)準則:
          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();    //取得一筆租借記錄

                 //   add frequent renter points(累加常客積點)
                    frequentRenterPoints ++;
                    if((each.getMovie().getPriceCode() == Movie.NEW_RELEASE) &&
                       each.getDaysRented() > 1)
                       frequentRenterPoints ++;

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

          再一次我又要尋找局部變量。這里再一次用到了each,而它可以被當作參數(shù)傳入新函數(shù)中。另一個臨時變量是frequentRenterPoints。本 例中的它在被使用之前已經(jīng)先有初值,但提煉出來的函數(shù)并沒有讀取改值,所以我們不需要將它當作參數(shù)傳進去,只需對它執(zhí)行[付添賦值操作](appending assignment,operator+=)就行了。

          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(結(jié)尾打印)
              result += "Amount owed is " + String.valueOf(totalAmount) + " \n";
              result += "You earned " + String.valueOf(frequentRenterPoints) +
                 "frequent renter points";
              return result;
          }

          class Rental...
              int getFrequentRenterPoints() {
                 if((getMovie().getPriceCode() == Movie.NEW_RELEASE)
                    && getDaysRented() > 1)
                    return 2;
                 else
                    return 1;
              }
          posted on 2005-08-15 13:29 ivaneeo 閱讀(275) 評論(0)  編輯  收藏 所屬分類: refactoring-從地獄中重生
          主站蜘蛛池模板: 乐都县| 乳山市| 商南县| 赣州市| 壶关县| 平安县| 山东省| 永年县| 望城县| 香河县| 铅山县| 蕉岭县| 德阳市| 襄汾县| 安庆市| 安义县| 阳谷县| 济南市| 延吉市| 盘锦市| 克什克腾旗| 班戈县| 巫山县| 昂仁县| 丰城市| 正定县| 荥经县| 陈巴尔虎旗| 长乐市| 伊宁县| 盐源县| 容城县| 城口县| 环江| 龙州县| 广南县| 开原市| 抚远县| 那坡县| 景泰县| 西青区|