一天一个重构方法(14):参数化方法
2009-06-07 03:23:21Parameterize Method:另方法携带参数
若干方法做了类似的工作,但在方法本体中却包括了不同的值,可以建立单一方法,以参数表达那些不同的值。
先看一个简单的例子:
public void TenPercentRaise()
{
salary *= 1.1;
}
public void FivePercentRaise()
{
salary *= 1.05;
}
这段代码可以替换如下:
public void Raise(double factor)
{
salary *= (1 + factor);
}
上面的那个例子太简单,所有人都能做到。下面是一个稍微复杂一点的例子:
public double 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 result;
}
上述代码可以替换如下:
public double BaseCharge()
{
double result = UsageInRange(0, 100) * 0.03;
result += UsageInRange(100,200) * 0.05;
result += UsageInRange(200, int.MaxValue) * 0.07;
return result;
}
private int UsageInRange(int start, int end)
{
if (LastUsage() > start)
return Math.Min(LastUsage(), end) - start;
return 0;
}
本项重构的技巧在于:以可将少量数值视为参数为依据,找出带有重复性的代码。