Parameterize Method (令函數攜帶參數)

Summary 若干函數作了相似的工做,但在函數本體中卻包含了不一樣的值。創建單一函數,以參數表達那些不一樣的值。java

                                               

動機:函數

  你可能會發現這樣兩個函數:它們作着相似的工做,但因少數幾個值導致行爲略有不一樣。這種狀況下,你能夠將這些各自分離的函數統一塊兒來,並經過參數來處理那些變化狀況,用以簡化問題。這樣的修改能夠去除重複代碼,並提升靈活性,由於你能夠用這個參數處理更多的變化狀況。測試

作法:spa

1.新建一個帶有參數的函數,使它能夠替換先前全部的重複性函數。code

2.編譯。編譯

3.將調用舊函數的代碼改成調用新函數。ast

4.編譯,測試。class

5.對全部舊函數重複上述步驟,每次替換後,修改並測試時。重構

也許你會發現,你沒法用這種辦法處理整個函數,但能夠處理函數中的一部分代碼。這種狀況下,你應該首先將這部分代碼提煉到一個獨立函數中,而後再對那個提煉所得的函數使用Parameterize Methodim

範例:

protected Dollars baseCharge(){
    double result = Math.min(lastUsage(), 100) * 0.03;
    if(lastUsage() > 100){
        result += (Math.min(lastUsage(), 200) - 100) * 0.05;
    }
    if(lastUsage() > 200){
        result += (lastUsage() -200) * 0.07;
    }
    return new Dollars(result);
}

上述代碼能夠替換以下:

protected Dollars baseCharge(){
    double result = usageInRange(0, 100) * 0.03;
    result += usageInRange(100, 200) * 0.05;
    result += usageInRange(200, Integer.MAX_VALUE) * 0.07;
    return new Dollars(result);
}

protected int usageInRange(int start, int end){
    if(lastUsage() > start){
        return Math.min(lastUsage(), end) - start;
    }else{
        return 0;
    }
}

本項重構的要點在於:以「可將少許數值視爲參數」爲依據,找出帶有重複性的代碼。

相關文章
相關標籤/搜索