重构读书笔记-10_5-Paraneteruze_Method

2019-07-19  本文已影响0人  MR_Model

重构第十章

5.Paraneteruze Method(令函数携带参数)

若干函数做了类似的工作,但在函数本体中却包含了不同的值,建立单一函数,以采纳数表达那些不同的值。

Example:

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);
}

End:

protect Dollars baseCharge() {
    double result = UsageInRange(0,100) *0.03;
    if (lastUsage() > 100)
        result += UsageInRange(100,200) *0.05;
    if (lastUsage() > 200)
        result += UsageInRange(200,Integer.MAX_VALUE) * 0.07;
    return new Dollars(result);
}
protect int usageInRange(int start, int end) {
    if(lastUsage() > start)
        return Math.min(lastUsage(),end) - start;
    else return 0;
}

Conclusion:

多个函数,做着类似的工作,但是少数几个值致使动作略有不同的情况下。我们可以使用Paraneteruze Method(令函数携带参数)方法来处理这种情况,可以简化问题,可以去除重复的代码,提高灵活性,因为你可以用这个参数处理其他变化情况。
如果无法用这种方法处理整个函数时,可以先处理函数的一部分代码,在提炼代码到另一个函数中,再使用Paraneteruze Method(令函数携带参数)方法,如示例。

注意

重构必须在有单元测试的情况下,保证之前的功能修改后不收影响。切记!!!
上一篇下一篇

猜你喜欢

热点阅读