<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ivaneeo's blog

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

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks
    現在我要對getCharge()實施Move Method(142).下面是重構前的代碼:
    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;
    }

    搬移動作很簡單。下面是重構后的代碼:
    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)了。
    下面是重構前的代碼:
    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分支,在相應的class內建一個覆寫函數(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 閱讀(167) 評論(0)  編輯  收藏 所屬分類: refactoring-從地獄中重生
    主站蜘蛛池模板: 亚洲欧美日韩综合久久久久| 怡红院免费全部视频在线视频| 亚洲片国产一区一级在线观看| 99精品视频在线观看免费| 亚洲精品第一国产综合精品| 免费鲁丝片一级在线观看| 久久WWW免费人成—看片| 亚洲大香伊人蕉在人依线| 国产成人aaa在线视频免费观看 | 国产小视频免费观看| 成人无码精品1区2区3区免费看| 亚洲色偷偷av男人的天堂| 免费国产综合视频在线看 | 欧亚一级毛片免费看| 免费一级肉体全黄毛片| 一级毛片aaaaaa免费看| 亚洲av永久中文无码精品综合| 伊人久久亚洲综合| 成人免费午夜在线观看| 国产精品美女久久久免费| 亚洲乱码在线卡一卡二卡新区| 国产亚洲日韩一区二区三区| 久久久久久99av无码免费网站| av片在线观看永久免费| 亚洲1234区乱码| 精品亚洲永久免费精品| 国产男女猛烈无遮挡免费视频 | 久久精品亚洲中文字幕无码麻豆| 免费大香伊蕉在人线国产 | 色影音免费色资源| 久久WWW免费人成—看片| 亚洲a∨无码一区二区| 亚洲成在人线电影天堂色| 亚洲精品无码久久久久| 国产免费131美女视频| 国产成人A在线观看视频免费| 久久99精品免费视频| 国产一级一毛免费黄片| 黄色毛片视频免费| 亚洲AV无码成人精品区日韩| 亚洲1234区乱码|