ivaneeo's blog

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

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks
          搬移[金額計(jì)算]代碼
          觀察amountFor()時(shí),我發(fā)現(xiàn)這個(gè)函數(shù)使用了來(lái)自Rental class的信息,卻沒有使用來(lái)自Customer class的信息.

          class Customer...
          public double amountFor(Rental aRental) {
              double result = 0;
              switch(aRental.getMovie().getPriceCode()) {   //取得影片出租價(jià)格
                    case Movie.REGULAR:   //普通片
                       result+= 2;
                       if(aRental.getDaysRented() > 2)
                          result+= (aRental.getDaysRented() - 2) * 1.5;
                       break;
                    case Movie.NEW_RELEASE:   //新片
                       result+= aRental.getDaysRented() * 3;
                       break;
                    case Movie.CHILDRENS:   //兒童片
                       result+= 1.5;
                       if(aRental.getDaysRented() > 3)
                          result+= (aRental.getDaysRented() - 3) * 1.5;
                       break;
                 }
              return result;
          }
          這立刻使我懷疑它是否被放錯(cuò)了位置.大多數(shù)情況下,函數(shù)應(yīng)該放在它使用的數(shù)據(jù)的所屬object(或說(shuō)class)內(nèi),所以amountFor()應(yīng)該移 到Rental class去.為了這么做,我要運(yùn)用Move Method(142).首先把代碼拷貝到Rental class內(nèi),調(diào)整代碼使之適應(yīng)新家,然后重新編譯.下面這樣:

          class Rental...
          double getCharge() {
              double result = 0;
              switch(getMovie().getPriceCode()) {   //取得影片出租價(jià)格
                    case Movie.REGULAR:   //普通片
                       result+= 2;
                       if(getDaysRented() > 2)
                          result+= (getDaysRented() - 2) * 1.5;
                       break;
                    case Movie.NEW_RELEASE:   //新片
                       result+= getDaysRented() * 3;
                       break;
                    case Movie.CHILDRENS:   //兒童片
                       result+= 1.5;
                       if(getDaysRented() > 3)
                          result+= (getDaysRented() - 3) * 1.5;
                       break;
                 }
              return result;
          }
          這個(gè)例子里,[適應(yīng)新家]意味去掉參數(shù).此外,我還要在搬移的同時(shí)變更函數(shù)名稱.

          現(xiàn)在我可以測(cè)試新函數(shù)是否正常工作.只要改變Customer.amountFor()函數(shù)內(nèi)容,使它委托(delegate)新函數(shù)即可:

          class Customer...
              private double amountFor(Rental aRental) {
                 return aRental.getCharge();
              }
          posted on 2005-08-15 11:03 ivaneeo 閱讀(187) 評(píng)論(0)  編輯  收藏 所屬分類: refactoring-從地獄中重生
          主站蜘蛛池模板: 综艺| 浙江省| 柞水县| 龙岩市| 墨竹工卡县| 新野县| 昆明市| 保德县| 辽阳县| 修武县| 搜索| 清原| 广灵县| 托克逊县| 梅河口市| 安庆市| 长治市| 浦东新区| 鹿邑县| 梨树县| 苍山县| 柳河县| 都安| 鄂州市| 隆尧县| 革吉县| 诸城市| 突泉县| 宣化县| 岑溪市| 隆尧县| 厦门市| 资中县| 安吉县| 洞口县| 金沙县| 玛曲县| 礼泉县| 新竹县| 通渭县| 平山县|