用于将if-then-else转换为条件的模式

时间:2015-02-09 08:41:45

标签: design-patterns refactoring

此重构模式的名称是什么?我想阅读更多关于它的意见,但无法命名。

在if-else语句的两个分支中执行相同的代码,但只有一个原子表达式不同。 E.g。

if (condition) {
    prepareSomethingAdditional();
    callMethod(true, "foobar");
}
else {
    callMethod(false, "foobar");
}

这可以重构,以表达" callMethod" call是指总是被执行,只是参数应根据条件而有所不同。 E.g。

if (condition) {
    prepareSomethingAdditional();
}
callMethod(condition, "foobar");

当然,这可能导致使用条件运算符作为方法参数(如果一个不同的表达式不仅仅是一个简单的真/假),这是另一个争论。

1 个答案:

答案 0 :(得分:0)

我找到的最接近的模式是Martin Fowler的Consolidate Duplicate Conditional Fragments

它不完全相同,因为片段略有不同,但我认为在这种情况下它仍然可以放在保护伞下。

您还可以将其视为DRY,恕我直言。

另一方面,请注意,将布尔值传递给用于控制执行流程的函数通常不是一个好主意,但这不是一个黄金法则。