ivaneeo's blog

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

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks
          搬移[金額計算]代碼
          觀察amountFor()時,我發現這個函數使用了來自Rental class的信息,卻沒有使用來自Customer class的信息.

          class Customer...
          public double amountFor(Rental aRental) {
              double result = 0;
              switch(aRental.getMovie().getPriceCode()) {   //取得影片出租價格
                    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;
          }
          這立刻使我懷疑它是否被放錯了位置.大多數情況下,函數應該放在它使用的數據的所屬object(或說class)內,所以amountFor()應該移 到Rental class去.為了這么做,我要運用Move Method(142).首先把代碼拷貝到Rental class內,調整代碼使之適應新家,然后重新編譯.下面這樣:

          class Rental...
          double getCharge() {
              double result = 0;
              switch(getMovie().getPriceCode()) {   //取得影片出租價格
                    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;
          }
          這個例子里,[適應新家]意味去掉參數.此外,我還要在搬移的同時變更函數名稱.

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

          class Customer...
              private double amountFor(Rental aRental) {
                 return aRental.getCharge();
              }
          posted on 2005-08-15 11:03 ivaneeo 閱讀(187) 評論(0)  編輯  收藏 所屬分類: refactoring-從地獄中重生
          主站蜘蛛池模板: 吉首市| 淮阳县| 万年县| 独山县| 古丈县| 桐乡市| 沧州市| 康马县| 长白| 佛山市| 雷山县| 仁寿县| 庆城县| 子长县| 会东县| 巩留县| 中西区| 昌黎县| 理塘县| 同德县| 遵义县| 弋阳县| 方正县| 故城县| 黄陵县| 郑州市| 芒康县| 滕州市| 五台县| 祁东县| 巴马| 行唐县| 镇赉县| 桐柏县| 石景山区| 图木舒克市| 莆田市| 濮阳县| 垫江县| 桐城市| 颍上县|