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

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

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

    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 閱讀(175) 評論(0)  編輯  收藏 所屬分類: refactoring-從地獄中重生
    主站蜘蛛池模板: 亚洲AV日韩AV天堂久久| 免费永久在线观看黄网站| 久久亚洲国产视频| 最近的2019免费中文字幕| 国产国拍亚洲精品福利| 爱情岛亚洲论坛在线观看| 四虎影库久免费视频| 国产偷国产偷亚洲高清人 | 国产真人无码作爱视频免费| 久久久久亚洲精品中文字幕| 成人福利在线观看免费视频| 大胆亚洲人体视频| 一级一级一片免费高清| 国产亚洲婷婷香蕉久久精品 | 深夜免费在线视频| 国产aⅴ无码专区亚洲av麻豆 | 亚洲视频小说图片| 免费一看一级毛片人| 亚洲av永久无码精品秋霞电影影院| 中文字幕在线免费看线人| 色婷婷六月亚洲婷婷丁香| 99爱在线精品免费观看| 亚洲欧洲无码AV不卡在线| 免费a在线观看播放| 水蜜桃视频在线观看免费播放高清| 亚洲高清国产AV拍精品青青草原| 免费无码一区二区三区| 亚洲丝袜中文字幕| 国产一级理论免费版| 国产在线精品观看免费观看| 91亚洲精品第一综合不卡播放| 无码少妇一区二区浪潮免费| 亚洲AV综合色区无码另类小说| 在线日本高清免费不卡| 亚洲精品无码专区| 亚洲中文字幕无码一区二区三区 | 亚洲 日韩 色 图网站| 亚洲国产婷婷综合在线精品| 久久精品中文字幕免费| 亚洲精品无码久久久久YW| 亚洲色大成网站www永久一区|