重构读书笔记-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(令函数携带参数)方法,如示例。
注意
重构必须在有单元测试的情况下,保证之前的功能修改后不收影响。切记!!!