代码重构总结
重构:对软件内部结构的一种调整,目的是在不改变软件之可察行为前提下,提高其理解性,降低其修改成本。
组织方法:
1抽取方法
创建一个新方法,命名以它做什么来命名,而不是怎么做来命名。 Example1示例
2方法内联
如果只是简单的委托,可以将方法内联。
注意点:
被子类继承的方法不能内联。Example2示例
3临时变量内联
如果一个临时变量只被简单的表达式赋值一次,就可以将它内联。
如何判定只被赋值一次?将这个临时变量申明为final。
如果是被赋值为一个方法的返回值。一般情况不用内联,除非妨碍了其他重构方法。
4查询取代临时变量
临时变量保存一个表达式的运算结果,可以抽取成一个独立方法(称之为查询),来代替临时变量。 Example4示例
5引入解释性变量。
如果有一个复杂的表达式,可以将该表达式中复杂的部分用一个临时变量来显示。
6分解临时变量
如果某个临时变量被赋值超过一次,而且它不是循环变量也不是表示一个整个方法都要使用的值。可以将它分解成好几个临时变量。 Example6示例
7去除对参数的赋值
JAVA中只采用值传递方式,因此对参数赋值会造成困惑。JAVA的方法参数表明被传递进来的东西,可以让代码清晰。 Example7示例
8方法对象取代方法
如果某个对象的一个方法很长,拥有很多局部变量。可以新建一个对象,将这个长方法放入新对象,将方法的所有局部变量变成新对象的类变量。并且在这个类中将这个长方法分解成很多小而短的方法。
移动对象特性
10移动方法
如果一个类中一个方法和另外一个类的调用,被调用更频繁,那么把这个方法放入另外那个类中。 Example1示例
如果一个类中一个类变量和另外一个类的调用,被调用更频繁,那么把这个类变量放入另外那个类中。Example2示例
12抽取类
一个类做了两个类的工作。新建一个类,将原来类中某些类变量和方法移植到新类来。Example3示例
13内联类
加入一个类中特性太少,可以将它和另外一个类合并。Example4示例
重组织数据
22对象取代数组
如果一个数组中包含不同东西,则转化为对象。 Example1示例
26替换魔法数
用一个常量替代有特别含义的数字或者字符串变量。Example2示例
27封装类变量
类变量最好不要设为public类型,设置为private,然后设置setter,getter方法为public
Example3示例
28封装集合类型
集合类型的getter方法不要返回集合对象,这样可以修改集合对象内容而创建者一无所知。所以确认getter方法返回的是不可更改的集合对象(只读),再增加对集合对象添加,删除元素的方法。Example4
简化表达式
34分解表达式
如果有一个复杂的if,else语句,可以将各个条件执行的代码抽取成独立的方法。
Example1示例
35合并表达式
如果有一些if语句返回结果相同,则可以用||和&&将这些if合并成一个if语句。Example2示例
36合并重复条件
如果if和else语句中有相同重复的代码,请将这些代码移出if,else语句。
Example3示例
37去除控制标记
if,else语句中如果某个变量有控制标记,用break或者return替代这个变量
Example4示例
38用检测语句代替嵌套条件
如果If,else语句太多,则代码复杂度会很高,使用检测语句来替代,检测语句要么返回一个实际的值,要么就抛出异常。Example5示例
39用多态代替条件表达式。
Switch case表达式可以使用多态来替代。
将包含switch case语句的方法转变成抽象方法,对于每个case,建立子类方法来实现。Example6示例
简化方法调用
42方法重命名
如果一个方法名字不能清晰表单含义,可以改成另外一个名字。Example1示例
43添加方法参数
往一个方法里添加参数。
必需注意的是,在添加之前想清楚是否真的是需要这个参数。Example2示例
44去除方法参数
把方法里不必要的参数去除掉。Example3示例
45将查询和修改分开
根据单一职责原则,一个方法只能做一件事情,因此方法里既有返回查询数据又有对数据的修改时候,我们要将这个方法分成两个方法。Example4示例
46参数化方法
如果两个方法或者两段代码只有部分代码不同,大部分代码都相同。那么可以将这两个方法或代码统一成一个方法,将不同部分作为统一方法的参数。Example5示例
47用明确方法代替参数
如果某个方法中某个参数的每一个可能值都会有相应的操作。则应该针对每一种操作创建独立的方法来实现。Example6示例
48保持对象完整
如果某一方法的几个参数都是同一个对象中的成员变量,则可以将这个对象作为方法参数传入。
优点:
1. 这个对象中新增某一成员变量也需要作为参数传入这个方法,如果是用把对象作为参数,则不需要更改这个方法的参数。否则你要将这个方法的参数增加一个新的参数。
2. 方法参数最好不要太多,使用这个重构操作就是为了减少方法的参数个数。
Example7示例
处理泛化
57上移类成员变量
如果一个类的两个子类中有相同的成员变量,则可以将这个成员变量上移到他们的父类中去。Example1示例
58上移方法
如果一个类的两个子类中有相同的方法或者返回类型相同,做同一件事情,则可以将这个方法上移到他们的父类中去。Example2示例
60下移方法
如果父类中某个方法只与部分子类有关,则将这一方法下移到子类中去。
61下移类变量
同理,父类中某一成员变量只与部分子类有关,则将这一变量下移到子类中去。
Eclipse 重构快捷键一览
Alt+Shift+T 打开重构菜单
Alt+Shift+R 方法,变量重命名
Alt+Shift+V 方法,变量移动
Alt+Shift+I 方法,变量内联
Alt+Shift+M 抽取方法
Alt+Shift+L 抽取局部变量
Alt+Shift+C 改变方法参数
已有 0 人发表留言,猛击->> 这里<<-参与讨论
ITeye推荐