ivaneeo's blog

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

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks
          范例(Examples)
          class Account...
              int gamma(int inputVal, int quantity, int yearToDate) {
                 int importantValue1 = (inputVal * quantity) + delta();
                 int importantValue2 = (inputVal * yearToDate) + 100;
                 if((yearToDate - importantValue1) > 100)
                    importantValue2 -= 20;
                 int importantValue3 = importantValue2 * 7;
                 //   and so on.
                 return importantValue3 -2 * importantValue1;
              }

          為了把這個函數(shù)變成一個函數(shù)對象(method object),我首先需要聲明一個新class。在此新class中我應(yīng)該提供一個final值域用以保存原先對象(源對象):對于函數(shù)的每一個參數(shù)和每一個臨時變量,也以一個個值域逐一保存。
          class Gamma...
              private final Account _account;
              private int inputVal;
              private int quantity;
              private int yearToDate;
              private int importantValue1;
              private int importantValue2;
              private int importantValue3;

          接下來,加入一個構(gòu)造函數(shù):

          Gamma (Account source, int inputValArg, int quantityArg, int yearToDateArg) {
              _account = source;
              inputVal = inputValArg;
              quantity = quantityArg;
              yearToDate = yearToDateArg;
          }

          現(xiàn)在可以把原來的函數(shù)搬到compute()了。函數(shù)中任何調(diào)用Account class的地方,我都必須改而使用_account值域:
          int compute() {
                 int importantValue1 = (inputVal * quantity) + _account.delta();
                 int importantValue2 = (inputVal * yearToDate) + 100;
                 if((yearToDate - importantValue1) > 100)
                    importantValue2 -= 20;
                 int importantValue3 = importantValue2 * 7;
                 //   and so on.
                 return importantValue3 -2 * importantValue1;
          }
          然后,我修改舊函數(shù),讓它將它的工作轉(zhuǎn)發(fā)給剛完成的這個函數(shù)對象(method object):
          int gamma(int inputVal, int quantity, int yearToDate) {
              return new Gamma(this, inputVal, quantity, yearToDate).compute();
          }
          這就是本項重構(gòu)的基本原則。它帶來的好處是:現(xiàn)在我可以輕松地對compute()函數(shù)采取Extract Method(110),不必?fù)?dān)心引數(shù)(argument)傳遞。
          int compute() {
              int importantValue1 = (inputVal * quantity) + _account.delta();
                 int importantValue2 = (inputVal * yearToDate) + 100;
                 importantThing();
                 int importantValue3 = importantValue2 * 7;
                 //   and so on.
                 return importantValue3 -2 * importantValue1;
          }
          void importantThing() {
              if((yearToDate - importantValue1) > 100)
                 importantValue2 -= 20;
          }
          posted on 2005-08-29 16:49 ivaneeo 閱讀(258) 評論(0)  編輯  收藏 所屬分類: refactoring-從地獄中重生
          主站蜘蛛池模板: 开封市| 太原市| 韩城市| 贡山| 张掖市| 桂平市| 曲沃县| 日土县| 兴仁县| 邯郸县| 阳江市| 马关县| 彩票| 左云县| 三都| 静乐县| 西青区| 卢龙县| 通江县| 海宁市| 盘山县| 景泰县| 洛南县| 沂源县| 镇原县| 安阳市| 新闻| 海丰县| 宁武县| 海阳市| 于田县| 金溪县| 云南省| 罗源县| 孙吴县| 郸城县| 吴川市| 泾阳县| 曲松县| 庄河市| 江阴市|