Inline Temp 内联临时变量
动机:临时变量影响了其他构造方法
当程序有一个临时变量只被赋值一次,而且影响到了其他的重构,那么我将这个变量去除,用赋值给他的表达式来替换临时变量;
确认等式右边的表达式无副作用
然后尝试将临时变量声明为final,确定只赋值一次
替换临时变量
Replace Temp with Query
当临时变量保存一个运算结果或者查询结果,将表达式提取到一个独立函数,然后用函数替代;
优点:这样去除了临时变量不能被其他函数引用导致的多余代码问题
找出临时变量,如果只是一次赋值的变量则可直接提取替代,如果是收集的是循环里面的结果则将整个循环提点。注意:当你的提取代码有副作用时候,记得要用Separate Query from Modifler来切割查询和副作用。(副作用:即会影响数据库的修改类操作或者非当前查询的参数被修改的情况)
Introduce Explaining Variale
当你的表达式复杂难懂时,将其提取出来用自定义命名的临时变量替换
优缺点:让代码变动容易理解,被局限于单个函数内
适合场景:
1.当用函数提取工作量比较大的时候就用引入解释性变量
2.当提取函数代码十分复杂,我们可以先引入解释性变量帮助理解,然后再提取
Remove Addignments to Paramters
移除对参数赋值,当代码对参数赋值时候吗,以一个临时变量取代参数的位置
优缺点:这是好的编码习惯,让你能更清晰java是值传递
注意:提高了代码的清晰度。如果你的语义是引用传递,需要修改对象的修改来进行返回,那你最好把修改的对象进行返回。如果需要返回的值不是一个,那么建议你每个返回值设计一个独立函数。
小技巧:你可以把每个参数都看成final 即是不可重新赋值,但是可以修改内部内容。时刻提醒自己java是值传递
Replace Method with Method Object
用函数对象替代函数,如果有一个大型函数不好分解,参数和临时变量十分多,那把这个函数替换成函数对象把,参数和临时变量作成字段,那么你就很容易将其分解成小函数了
优缺点:这样的话参数和临时变量就十分容易处理,而且不用担心传递的问题,只是工作量就比较偏大了。
做法:
1.创建新类,将原函数的原对象作为一个final字段定义
2.将原函数的参数和临时变量定义为字段
3.定义个传入原对象和参数,临时变量的构造函数
4.创建一个新函数,将原函数复制过来,并将变量替换成字段,进行分解提炼
5.将原函数的返回替换成新对象的新函数调用
Substitute Algorithm
替换算法,将复杂的函数进行分解提炼后,将麻烦的算法替换成一个简单算法
优缺点: 方便修改,在修改前替换算法是有利于后面算法的修改的
来源:CSDN
作者:JiangTun
链接:https://blog.csdn.net/JiangTun/article/details/103959428