一、Decompose Conditional(分解条件表达式)
你有一个复杂的条件语句,从if、else段落中分别提炼出独立函数。
1、将if段落提炼出来,构成一个函数。
2、将else提炼出来,构成一个函数。
二、Consolidate Conditional Expression(合并条件表达式)
你有一系统条件测试,都者到相同结果。将这些测试合并为一个条件表达式,并将这个条件表达式提炼成一个独立函数。
1、确定这些条件语句没有副作用。
2、使用适当的逻辑操作符,将一系统相关条件表达式合并为一个。
3、编译、测试。
4、对合并的条件表达式实施Extract Method。
代码重构后:
三、Consolidate Duplicate Conditional Fragments(合并重复的条件片段)
在条件表达式的每个分支上有着相同的一段代码,将这段重复代码搬移到条件表达式之外。
1、鉴别出“执行方式不随条件变化而变化”的代码。
2、如果这些代码位条件表达式起始或尾端,把这些代码移到条件表达式之前或之后。
3、如果这些代码在条件表达式之中,观察代码之前或之后改变了什么,然后移到条件表达式之前或之后。
4、如果共通代码不只一条语名,则首先使用Extract Method将共通代码放入一个独立函数中。
四、Remove Control Flag(移除控制标记)
在一系列布尔表达式中,某个变量带有“控制标记”(control flag)的作用。以break或return语名取代控制标记。
1、找出让你跳出这段逻辑的控制标记值。
2、找出对标记变量赋值的语句,代以恰当的break或continue语句。
3、每次替换后,编译并测试。
五、Replace Nested Conditional With Guard Clauses(以卫语名取代嵌套条件表达式)
函数中条件逻辑使人难以看清正常的执行路径。使用卫语句表现所有特殊情况。
1、对于每个检查,放进一个卫语句。
2、编译、测试。
六、Replace Conditional with Polymorphism(以多态取代条件表达式)
你手上有个条件表达式,它根据对象类型的不同而选择不同的行为。将这个条件表达式的每个分支放进一个子类内的覆写函数中,然后将原始函数声明为抽象函数。
1、如果条件表达式是一个更大函数中一部分,首先对条件表达式分析,使用Extract Method到一个独立函数中。
2、如果有必要,可以将条件表达式放在继承结构的顶端。
3、任选一个子类,覆写父类的函数。
4、编译、测试。
5、在父类删除条件表达式中被复制的分支。
6、编译、测试。
7、针对条件表达式,重复上述过程。
8、将父类条件表达式函数声明为抽象函数。
七、Introduce Null Object(引入Null对象)
你需要再三检查某对象是否为null。将null值替换为null对象。
1、为源类建立一个子类,加一个IsNull()函数,源类返回false,子类返回true。
2、编译。
3、找出源对象获得null的地方,修改成IsNull()函数。
4、编译、测试。
5、如果是NULL做A动作,否则做B动作。
6、在新建的子类中覆写A动作,使其行为与B动作相同。
7、然后删除条件是”对象是否为null“,编译、测试。
案例:
第一步骤处理后结果为:
第三步骤处理后:
最后一步骤:
八、Introduce Assertion(引入断言)
某一段代码需要对程序状态做出某种假设。以断言明确表现这种假设。
1、如果你发现代码假设某个条件始终为真,就加入一个断言明确说明这种情况。
加入断言后: