ivaneeo's blog

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

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks
          Customer.statement():
          public String statement() {
              double totalAmount = 0;
              int frequentRenterPoints = 0;
              Enumeration rentals = _rentals.elements();
              String result = "Rental Record for * " + getName() + "\n";
              while(rentals.hasMoreElements()) {
                 double thisAmount = 0;
                 Rental each = (Rental)rentals.nextElement();    //取得一筆租借記錄

                 thisAmount = each.getCharge();

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

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

          下一件引我注意的事時:thisAmount如今變成多余了.它接受each.getCharge()的執行結果,然后就不再有任何改變.所以我可以運用Replace Temp with Query(120)把thisAmount除去:
          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(結尾打印)
              result += "Amount owed is " + String.valueOf(totalAmount) + " \n";
              result += "You earned " + String.valueOf(frequentRenterPoints) +
                 "frequent renter points";
              return result;
          }
          我喜歡盡量除去這一類臨時變量.臨時變量往往形成問題.它們會導致大量參數被傳來傳 去,而其實完全沒有這種必要.你很容易失去它們的蹤跡,尤其在長長的函數之中更是如此.當然我這么做也需付出性能上的代價,例如本例的費用就被計算了兩 次.但是這很容易在Rental class中被優化.而且如果代碼有合理的組織和管理,優化會有很好的效果.
          posted on 2005-08-15 13:12 ivaneeo 閱讀(193) 評論(0)  編輯  收藏 所屬分類: refactoring-從地獄中重生
          主站蜘蛛池模板: 乳山市| 长泰县| 和龙市| 婺源县| 宜章县| 建宁县| 罗城| 鸡东县| 贵溪市| 和林格尔县| 南江县| 平利县| 塔城市| 定结县| 墨脱县| 凤冈县| 衡山县| 海南省| 思茅市| 鹤壁市| 焦作市| 呼伦贝尔市| 新平| 小金县| 方山县| 沙雅县| 于都县| 赞皇县| 张家界市| 临猗县| 萍乡市| 兴义市| 巴彦县| 布拖县| 泉州市| 偃师市| 平武县| 彰化市| 颍上县| 沛县| 福州市|