1.Extract Method
如果每个函数的粒度都很小(finely grained),那么函数之间彼此复用的机会就更大,高层函数读起来就像一系列注释 如果函数都是细粒度,那么函数的覆写(override)也会更容易些。 无局部变量(No local Variables) 有局部变量(Using Local Variables) 对局部变量再赋值(Reassigning) 变量只在被提炼码区段中使用被提炼码之外的代码也使用了这个变量
a.被提炼码之外未被再使用
b.之后的代码还使用变量
2.Inline Method
- 间接性可能带来帮助,但非必要的间接性总是让人不舒服
- 有一群组织不甚合理的函数,可以将它们都INLINE到一个大型函数中,再从中提炼出组织合理的小函数
- 如果别人使用太多间接层,使得系统中的所有函数都似乎只是对另一个函数的简单委托
3.Inline Temp
- 一个临时变量,只被一个简单表达式赋值一次,而它妨碍了其他重构手法
- 用final进行处理
4.Replace Temp With Query
- 程序以一个临时变量保存某一个表达式的运算结果,将这个表达式提炼到一个独立函数中,将这个临时变量的所有被引用点替换为对新函数的调用
- 如果把临时变量替换为一个查询式,那么用一个CLASS中的所有函数都可以获得此函数
5. Introduce Explaining Variable
- 将该复杂表达式的结果放进一个临时变量,以此变量名称来解释表达式用途
- 在条件表达逻辑中,特别用价值
6.Split Temporary Variable
- 此方法不使用与集用临时变量:等加,字符串接合,写入STREAM 或者向群集(COLLECTION)添加元素
- 某个临时变量被赋值超过一次,它既不是循环变量,也不是一个集用临时变量
7.Remove Assignments To Parametes
- 以一个临时变量取代该参数的位置,在JAVA中不要对参数赋值
8.Replace Method With Method Object
- 有一个大型函数,其中对局部变量的使用,使你无法采用EXTRACT METHOD。
- 将这个函数放进一个单独对象中,如此一来局部变量就成了对象内的值域,然后你就可以在同一个对象中将这个大型函数分解为数个小型函数
9.Subsitute Algorithm
- 将函数本体替换为另一个算法,尽可能分解了原函数