重构方法

重新组织函数

提炼函数

做法

  1. 将某段代码放进一个独立函数中,并让函数名称解释该函数的用途。
  2. 检查提炼出来的代码,是否引用了“作用域限于源函数”的变量
  3. 检查是否有“仅用于被提炼代码段”的临时变量。如果有,在目标函数中将其声明为临时变量。
  4. 检查被提炼代码段,临时变量的值是否被修改。如果有,可以将临时变量处理为一个查询返回结果。
  5. 将被提炼代码段中需要读取的局部变量,当做参数传给目标函数。

以查询代替临时变量

当程序以一个临时变量保存某一表达式的运算结果时,可以将这个表达式提炼到一个独立函数中。将这个临时变量的所有引用点替换为对新函数的调用。同时,新函数可被其他函数调用。

做法

  1. 找出只被赋值一次的临时变量
  2. 将该临时变量声明为final
  3. 将“对该临时变量赋值”的语句的等号右侧部分提炼到一个独立函数中(该独立函数一般声明为private)。

引入解释性变量

对于复杂表达式,将该复杂表达式(或其中一部分)的结果放进一个临时变量,以此变量名称来解释表达式用途。

做法

  1. 声明一个final临时变量,将待分解的复杂表达式中的一部分动作的运算结果赋值给它。
  2. 将表达式中的“运算结果”这一部分,替换为上述临时变量。

分解临时变量

如果程序中的某个临时变量的赋值超过一次,它既不是循环变量,也不被用于收集计算结果,那么,针对每次赋值,创造一个独立、对应的临时变量。

做法

  1. 在待分解临时变量的声明及其第一次被赋值处,修改其名称。
  2. 将新的临时变量声明为final。
  3. 以该临时变量的第二次赋值动作为界,修改此前对该临时变量的所有引用点,让它们引用新的临时变量。
  4. 在第二次赋值处,重新声明原先那个临时变量。
  5. 逐次重复上述过程。

移除对参数的赋值

当代码对一个参数进行赋值,需要以一个临时变量取代该参数的位置。
(原来对参数进行赋值的做法,降低了代码的清晰度,混用了按值传递和按引用传递这两种参数传递方式。Java只采用按值传递方式)

做法

  1. 建立一个临时变量,把待处理的参数赋值给它。
  2. 以“对参数的赋值”为界,将其后所有对此参数的引用点,全部替换为“对该临时变量的引用”。
  3. 修改赋值语句,使其改为对新建的临时变量赋值。

猜你喜欢

转载自blog.csdn.net/onpwerb/article/details/70049395