<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
    首先我要使用Replace Type Code with State/Strategy(227).第一步驟是針對[與型別相依的行為]使用Self Encapsulate Field(171),確保任何時候都通過gettingsetting兩個函數來運用這些行為。由于多數代碼來自其他classes,所以多數函數都已經使用getting函數。但構造函數(constructor)仍然直接訪問價格代碼:
    class Movie...
        public Movie(String name, int priceCode) {
           _title = name;
           _priceCode = priceCode;
        }

    我可以用一個setting函數來代替:
    class Movie...
        public Movie(String name, int priceCode) {
           _title = name;
           setPriceCode(priceCode);
        }
    現在我加入新class,并在price對象中提供[與型別相依的行為]。為了實現這一點,我在Price內加入一個抽象函數(abstract method),并在其所有subclasses中加上對應的具體函數(concrete method):

    abstract class Price {
        abstract int getPriceCode();   //取得價格代號
    }
    class ChildernsPrice extends Price {
        int getPriceCode() {
           return Movie.CHILDERNS;
        }
    }
    class NewReleasePrice extends Price {
        int getPriceCode() {
           return Movie.NEW_RELEASE;
        }
    }
    class RegularPrice extends Price {
        int getPriceCode() {
           return Movie.REGULAR;
        }
    }

    現在,我需要修改Movie class內的[價格代號]訪問函數(get/set函數,如下),讓它們使用新class。下面是重構前的樣子:
    public int getPriceCode() {
        return _priceCode;
    }
    public void setPriceCode(int arg) {
        _priceCode;
    }
    private int _priceCode;

    這個意味我必須在Movie class內保存一個price對象,而不再是保存一個_priceCode變量。此外我還需要修改訪問函數:
    class Movie...
        public int getPriceCode() {   //取得價格代號
           return _price.getPriceCode();
        }
        public void setPriceCode(int arg) {   //設定價格代碼
           switch(arg) {
              case REGULAR:   //普通片
                 _price = new RegularPrice();
                 break;
              case CHILDERNS:   //兒童片
                 _price = new ChildernsPrice();
                 break;
              case NEW_RELEASE:   //新片
                 _price = new NewReleasePrice();
                 break;
              default:
                 throw new IllegalArument Exception("Incorrect Price Code");
           }
        }
        private Price _price;
    posted on 2005-08-15 17:18 ivaneeo 閱讀(175) 評論(0)  編輯  收藏 所屬分類: refactoring-從地獄中重生
    主站蜘蛛池模板: 扒开双腿猛进入爽爽免费视频 | 免费在线观影网站| 亚洲AV日韩AV天堂一区二区三区| 久久不见久久见免费视频7| 日韩亚洲国产高清免费视频| 亚洲av区一区二区三| 久久国产精品萌白酱免费| 亚洲mv国产精品mv日本mv| 亚洲国产精品无码久久久久久曰 | 91久久精品国产免费一区| 亚洲精品国产av成拍色拍| 国产亚洲一区二区精品| 成人a免费α片在线视频网站| jzzjzz免费观看大片免费| 亚洲精品白色在线发布| 亚洲一区日韩高清中文字幕亚洲 | 男女超爽视频免费播放| 亚洲精品第五页中文字幕| 无码不卡亚洲成?人片| 免费观看的毛片大全| 韩国免费A级毛片久久| 亚洲欧洲AV无码专区| 亚洲国产第一页www| 深夜国产福利99亚洲视频| 国内精品免费麻豆网站91麻豆| 免费人妻精品一区二区三区| 亚洲国产精品乱码在线观看97| 亚洲乱码国产一区三区| 国产成人在线观看免费网站| 18未年禁止免费观看| 成人一区二区免费视频| 亚洲AV日韩综合一区| 亚洲一卡二卡三卡| 亚洲av无码一区二区三区网站| 日韩精品亚洲专区在线观看| 成年大片免费视频| 99无码人妻一区二区三区免费| a毛片免费全部播放完整成| 免费夜色污私人影院网站电影 | 国产精品永久免费10000| 三年片在线观看免费|