- 1 Decompose Conditional (分解条件表达式)
- 2 Consolidate Conditional Expression (合并条件表达式)
- 3 Consolidate Duplicate Conditional Fragments (合并重复的条件片段)
- 4 Remove Control Flag (移除控制标记)
- 5 Replace Nested Conditional with Guard Clauses (以卫语句取代嵌套条件表达式)
- 6 Replace Conditional with Polymorphism (以多态取代条件表达式)
- 7 Introduce Null Object (引入 Null 对象)
- 8 Introduce Assertion (引入断言)
1 Decompose Conditional (分解条件表达式)
你有一个复杂的条件 (if-then-else) 语句。
从 if,then,else 三个段落中分别提炼出独立函数。
动机
增加可读性
2 Consolidate Conditional Expression (合并条件表达式)
你有一系列条件测试,都得到相同结果。
将这些测试合并为一个条件表达式,并将这个条件表达式提炼成为一个独立函数。
动机
如果你认为这些检查的确彼此独立,那么就不要使用本项重构
3 Consolidate Duplicate Conditional Fragments (合并重复的条件片段)
在条件表达式的每个分支上有着相同的一段代码。
将这段重复代码搬移到条件表达式之外。
4 Remove Control Flag (移除控制标记)
在一系列布尔表达式中,某个变量带有“控制标记”(control flag)的作用。
以 break 语句或 return 语句取代控制标记。
5 Replace Nested Conditional with Guard Clauses (以卫语句取代嵌套条件表达式)
函数中的条件逻辑使人难以看清正常的执行路径。
使用卫语句表现所有特殊情况。
动机
保持代码清晰才是最关键的:如果单一出口能使这个函数更清楚易读,那么就使用单一出口;否则就不必这么做。
6 Replace Conditional with Polymorphism (以多态取代条件表达式)
你手上有个条件表达式,它根据对象类型的不同而选择不同的行为。
将这个条件表达式的每个分支放进一个子类内的覆写函数中,然后将原始函数声明为抽象函数。
动机
使用条件表达式时,如果你想添加一种新类型,就必须查找并更新所有条件表达式。但如果改用多态,只需建立一个新的子类,并在其中提供适当的函数就行了。
7 Introduce Null Object (引入 Null 对象)
你需要再三检查某对象是否为null。
将null值替换为null对象。
做法
null对象实现isNull()方法
8 Introduce Assertion (引入断言)
某一段代码需要对程序状态做出某种假设。
以断言明确表现这种假设。