ivaneeo's blog

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

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks
          現(xiàn)在我要對getCharge()實施Move Method(142).下面是重構(gòu)前的代碼:
          class Movie...
          double getCharge(int daysRented) {
              double result = 0;
              switch(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;
          }

          搬移動作很簡單。下面是重構(gòu)后的代碼:
          class Movie...
              double getCharge(int daysRented) {
                 return _price.getCharge(daysRented);
              }


          class Price...
             double getCharge(int daysRented) {
              double result = 0;
              switch(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;
          }

          搬移之后,我就可以開始運用Replace Conditional with Polymorphism(255)了。
          下面是重構(gòu)前的代碼:
          class Price...
             double getCharge(int daysRented) {
              double result = 0;
              switch(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;
          }

          我的作法是一次取出一個case分支,在相應(yīng)的class內(nèi)建一個覆寫函數(shù)(override method)。先從RegularPrice開始:
          class RegularPrice...
              double getCharge(int daysRented) {
                 double result = 2;
                 if(daysRented > 2)
                    result += (daysRented - 2) * 1.5;
                 return result;
              }

          class ChildernsPrice...
              double getCharge(int daysRented) {
                 double result = 1.5;
                 if(daysRented > 3)
                    result += (daysRented - 3) * 1.5;
                 return result;
              }

          class NewReleasePrice...
          double getCharge(int daysRented) {
                 return daysRented * 3;
              }

          處理完所有case分支之后,我就把Price.getCharge()聲明為abstract:
          class Price...
              abstract double getCharge(int daysRented);
          posted on 2005-08-15 17:21 ivaneeo 閱讀(171) 評論(0)  編輯  收藏 所屬分類: refactoring-從地獄中重生
          主站蜘蛛池模板: 乳源| 呼伦贝尔市| 南乐县| 甘肃省| 日喀则市| 成都市| 栖霞市| 石门县| 宁河县| 泸水县| 板桥市| 洪江市| 湘乡市| 潼南县| 玉田县| 绥滨县| 周口市| 浏阳市| 元江| 洛隆县| 凌云县| 陆河县| 新蔡县| 调兵山市| 西丰县| 大埔区| 威远县| 浦江县| 历史| 洞口县| 武邑县| 伊宁县| 东辽县| 万源市| 星座| 远安县| 双江| 卢龙县| 佳木斯市| 来安县| 陆良县|