我遇到过这样一种情况,尝试不必修改底层源代码(在那个级别它不是真正的“我的”代码;否则,我很想修改它),我有两个几乎相同的代码路径,但是我正在使用的不同类型的数据。
忽略您可能很容易将一个转换为另一个,类似的示例将是“圆形”对象。
一方面,我有一个Point
对象和一个半径。另一方面,我有一个Circle
对象。这两个都可以描述同一个实际的圆圈,但我无法将一个转换为另一个。
然后,在我的代码中,我有:
void Run(Circle circle)
{
if(AllNegative(circle))
{
// ...
// Do unrelated stuff
// ...
ColorCircle(circle);
// ...
}
}
void Run(Point pt, uint radius)
{
if(AllNegative(pt, radius))
{
// ...
// Do unrelated stuff
// ...
ColorCircle(pt, radius);
// ...
}
}
bool AllNegative(Circle circle) { return (circle.AllNegative); }
bool AllNegative(Point pt, uint radius) { return ((pt.X + radius) < 0) && ((pt.Y + radius) < 0); }
void ColorCircle(Circle circle) { /* ... */ }
void ColorCircle(Point pt, uint radius) { /* ... */ }
当然,我的代码Run
比这个例子中的要多。
如何合并Run
到单个函数中以最大程度地减少代码重复?