<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
    運用多態(polymorphism)取代與價格相關的條件邏輯
    這個問題的第一部分是switch語句。在另一個對象的屬性(attribute)基礎上運用switch語句,并不是什么好注意。如果不得不使用,也應該在對象自己的數據上使用,而不是在別人的數據上使用。
    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;
    }

    這暗示getCharge()應該移到Movie class里頭去:
    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;
    }

    為了讓它得以運作,我必須把[租期長度]作為參數傳遞進去。當然,[租期長度]來自 Rental對象.計算費用時需要兩份數據:[租期長度]和[影片類型]。為什么我選擇[將租期長度傳給Movie對象]而不是[將影片類型傳給 Rental對象]呢?因為本系統可能發生的變化是加入新影片類型,這種變化帶有不穩定傾向。如果影片類型有所變化,我希望掀起最小的漣漪,所以我選擇在 Movie對象內計算費用。

    我把上述計費方法放進Movie class里頭,然后修改Rental的getCharge(),讓它使用這個新函數:
    class Rental...
        double getCharge() {
           return _movie.getCharge(_daysRented);
        }
    posted on 2005-08-15 14:54 ivaneeo 閱讀(188) 評論(0)  編輯  收藏 所屬分類: refactoring-從地獄中重生
    主站蜘蛛池模板: 亚洲啪啪免费视频| 狠狠亚洲婷婷综合色香五月排名| 久久夜色精品国产嚕嚕亚洲av| 亚洲国产欧美一区二区三区| 91精品国产免费久久久久久青草| 亚洲高清视频在线观看| 久久国产精品免费专区| 亚洲成AV人片在线观看| 国产在线观a免费观看| 好看的亚洲黄色经典| 18禁超污无遮挡无码免费网站 | 亚洲一区二区三区国产精华液| 久久永久免费人妻精品下载| 亚洲色四在线视频观看| 99re免费在线视频| 久久久无码精品亚洲日韩京东传媒| 久久aⅴ免费观看| 亚洲精品日韩中文字幕久久久| 18女人水真多免费高清毛片| 亚洲成电影在线观看青青| 四虎成年永久免费网站| 亚洲日韩国产精品乱-久| 免费鲁丝片一级观看| 最新亚洲人成网站在线观看 | 国产成人精品免费视频大| 亚洲国产日韩在线人成下载| 24小时日本在线www免费的| 亚洲aⅴ天堂av天堂无码麻豆| 亚洲成av人片在线观看天堂无码 | 亚洲youjizz| 免费人成在线观看网站品爱网日本| 特级毛片aaaa免费观看| 亚洲国产精品无码久久久不卡 | 91精品国产亚洲爽啪在线影院| 国产在线观看麻豆91精品免费| 亚洲性无码AV中文字幕| 亚洲综合区小说区激情区| 国产高清不卡免费视频| 亚洲国产乱码最新视频| 久久精品亚洲福利| 无码国产精品一区二区免费式影视|