ivaneeo's blog

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

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks
          范例(Examples)
          class IntRange {
              private int _low, _high;
             
              boolean includes(int arg) {
                 return arg >= _low && arg <= _high;
              }

              void grow(int factor) {
                 _high = _high * factor;
              }

              IntRange(int low, int high) {
                 _low = low;
                 _high = high;
              }
          為了封裝_low和_high這兩個(gè)值域,我先定義[取值/設(shè)值函數(shù)](如果此前沒有定義的話),并使用它們:
          class IntRange {
              private int _low, _high;
             
              boolean includes(int arg) {
                 return arg >= _low && arg <= _high;
              }

              void grow(int factor) {
                 _high = _high * factor;
              }

              int getLow() {
                 return _low;
              }

              int getHigh() {
                 return _high;
              }

              void setLow(int arg) {
                 _low = arg;
              }

              void setHigh(int arg) {
                 _high = arg;
              }
          使用本項(xiàng)重構(gòu)時(shí),一般說來,設(shè)值函數(shù)被認(rèn)為應(yīng)該在[對象創(chuàng)建后]才使用,所以初始化過程中的行為有可能與設(shè)值函數(shù)的行為不同。這種情況下,我也許在構(gòu)造函數(shù)中直接訪問值域,要不就是建立另一個(gè)獨(dú)立的初始化函數(shù):
          IntRange(int low, int high) {
              initialize(low, high);
          }
          private void initialize(int low, int high) {
              _low = low;
              _high = high;
          }
          一旦你擁有一個(gè)subclass,上述所有動(dòng)作的價(jià)值就體現(xiàn)出來了。如下所示:
          class CappedRange extends IntRange {
              CappedRange(int low, int high, int cap) {
                 super(low, high);
                 _cap = cap;
              }

              private int _cap;

              int getCap() {
                 return _cap;
              }
              
              int getHigh() {
                 return Math.min(super.getHigh(), getCap());
              }
          }
          現(xiàn)在,我可以CappedRange class中覆寫getHigh(),從而加入對cap的考慮,而不必修改IntRange class的任何行為。
          posted on 2005-08-31 15:57 ivaneeo 閱讀(220) 評論(0)  編輯  收藏 所屬分類: refactoring-從地獄中重生
          主站蜘蛛池模板: 修文县| 高陵县| 揭阳市| 潮州市| 开化县| 江华| 岳阳市| 西乌珠穆沁旗| 康平县| 五大连池市| 鲁甸县| 故城县| 乐昌市| 双桥区| 罗城| 调兵山市| 石台县| 闸北区| 琼中| 兴文县| 合山市| 纳雍县| 商城县| 凭祥市| 运城市| 武隆县| 黄浦区| 潮安县| 孝义市| 安龙县| 定州市| 公安县| 柞水县| 舒城县| 沐川县| 马关县| 特克斯县| 厦门市| 尤溪县| 宁化县| 丹东市|