<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-從地獄中重生
    主站蜘蛛池模板: 国产综合精品久久亚洲| 99久久国产热无码精品免费| 在线观看免费人成视频| 亚洲精品第五页中文字幕| 成人毛片100免费观看| 国产成人高清亚洲| 精选影视免费在线 | 久久久久亚洲AV无码专区桃色| 亚洲国产精品乱码在线观看97 | 在线免费观看一级片| 亚洲国产电影在线观看| 久久精品免费全国观看国产| 亚洲看片无码在线视频| 在线看片人成视频免费无遮挡| 亚洲精品中文字幕无码A片老| 国内一级一级毛片a免费| 麻豆安全免费网址入口| 国产专区一va亚洲v天堂| 国产成人AV免费观看| 亚洲理论片在线中文字幕| 好先生在线观看免费播放| 色五月五月丁香亚洲综合网| 亚洲日韩涩涩成人午夜私人影院| 免费无码H肉动漫在线观看麻豆| 亚洲人成电影福利在线播放| 日本阿v免费费视频完整版| 亚洲第一综合天堂另类专 | 亚洲国产精品一区二区成人片国内 | 国产成人高清精品免费鸭子| 免费人成动漫在线播放r18 | 国产午夜精品久久久久免费视 | 亚洲自偷自拍另类12p| 三年片在线观看免费大全| 国产亚洲视频在线| 亚洲av鲁丝一区二区三区| 在线视频观看免费视频18| 黄色免费网址大全| 亚洲视频一区二区在线观看| 国产精品久久久久影院免费| 特级无码毛片免费视频尤物 | 足恋玩丝袜脚视频免费网站|