<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
    范例(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;
        }

    為了把這個(gè)函數(shù)變成一個(gè)函數(shù)對(duì)象(method object),我首先需要聲明一個(gè)新class。在此新class中我應(yīng)該提供一個(gè)final值域用以保存原先對(duì)象(源對(duì)象):對(duì)于函數(shù)的每一個(gè)參數(shù)和每一個(gè)臨時(shí)變量,也以一個(gè)個(gè)值域逐一保存。
    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è)構(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ā)給剛完成的這個(gè)函數(shù)對(duì)象(method object):
    int gamma(int inputVal, int quantity, int yearToDate) {
        return new Gamma(this, inputVal, quantity, yearToDate).compute();
    }
    這就是本項(xiàng)重構(gòu)的基本原則。它帶來的好處是:現(xiàn)在我可以輕松地對(duì)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 閱讀(256) 評(píng)論(0)  編輯  收藏 所屬分類: refactoring-從地獄中重生
    主站蜘蛛池模板: 日韩精品免费一线在线观看| 国产精品免费无遮挡无码永久视频 | 一区二区免费国产在线观看| 国产亚洲综合一区柠檬导航| 美丽的姑娘免费观看在线播放 | 午夜精品射精入后重之免费观看| 亚洲不卡中文字幕| 大胆亚洲人体视频| 亚洲国产精品免费视频| 亚洲AV综合色区无码一二三区| 亚洲自偷自偷图片| 成人a视频片在线观看免费| 久青草视频在线观看免费| 亚洲三级在线免费观看| 亚洲精品无码专区久久同性男| 最近中文字幕免费2019| 日韩免费高清一级毛片| 亚洲精品自在线拍| AV在线播放日韩亚洲欧| 嫖丰满老熟妇AAAA片免费看| 一本大道一卡二大卡三卡免费| 亚洲国产美女精品久久久久| 亚洲一区日韩高清中文字幕亚洲 | 成人性生交大片免费看午夜a| 中文字幕av免费专区| 亚洲人成网国产最新在线| 亚洲AV美女一区二区三区| 五月婷婷亚洲综合| 无码中文在线二区免费| 免费国产叼嘿视频大全网站| 在线91精品亚洲网站精品成人| 91嫩草亚洲精品| 亚洲伦另类中文字幕| 伊人亚洲综合青草青草久热| 日韩免费视频播播| 日本成年免费网站| 91精品国产免费| 免费精品一区二区三区第35| 十八禁的黄污污免费网站| 亚洲精品久久无码| 亚洲综合无码一区二区痴汉|