`
fanjf
  • 浏览: 294430 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

代码重构总结

 
阅读更多

重构:对软件内部结构的一种调整,目的是在不改变软件之可察行为前提下,提高其理解性,降低其修改成本。

组织方法:

1抽取方法

创建一个新方法,命名以它做什么来命名,而不是怎么做来命名。Example1示例

2方法内联

如果只是简单的委托,可以将方法内联。

注意点:

被子类继承的方法不能内联。Example2示例

3临时变量内联

如果一个临时变量只被简单的表达式赋值一次,就可以将它内联。

如何判定只被赋值一次?将这个临时变量申明为final

如果是被赋值为一个方法的返回值。一般情况不用内联,除非妨碍了其他重构方法。

Example3示例

4查询取代临时变量

临时变量保存一个表达式的运算结果,可以抽取成一个独立方法(称之为查询),来代替临时变量。Example4示例

5引入解释性变量。

如果有一个复杂的表达式,可以将该表达式中复杂的部分用一个临时变量来显示。

Example5示例

6分解临时变量

如果某个临时变量被赋值超过一次,而且它不是循环变量也不是表示一个整个方法都要使用的值。可以将它分解成好几个临时变量。Example6示例

7去除对参数的赋值

JAVA中只采用值传递方式,因此对参数赋值会造成困惑。JAVA的方法参数表明被传递进来的东西,可以让代码清晰。Example7示例

8方法对象取代方法

如果某个对象的一个方法很长,拥有很多局部变量。可以新建一个对象,将这个长方法放入新对象,将方法的所有局部变量变成新对象的类变量。并且在这个类中将这个长方法分解成很多小而短的方法。

Example8示例

移动对象特性

10移动方法

如果一个类中一个方法和另外一个类的调用,被调用更频繁,那么把这个方法放入另外那个类中。Example1示例

11移动类变量

如果一个类中一个类变量和另外一个类的调用,被调用更频繁,那么把这个类变量放入另外那个类中。Example2示例

 

12抽取类

一个类做了两个类的工作。新建一个类,将原来类中某些类变量和方法移植到新类来。Example3示例

13内联类

加入一个类中特性太少,可以将它和另外一个类合并。Example4示例

重组织数据

22对象取代数组

如果一个数组中包含不同东西,则转化为对象。Example1示例

26替换魔法数

用一个常量替代有特别含义的数字或者字符串变量。Example2示例

27封装类变量

类变量最好不要设为public类型,设置为private,然后设置settergetter方法为public

Example3示例

28封装集合类型

集合类型的getter方法不要返回集合对象,这样可以修改集合对象内容而创建者一无所知。所以确认getter方法返回的是不可更改的集合对象(只读),再增加对集合对象添加,删除元素的方法。Example4

简化表达式

34分解表达式

如果有一个复杂的ifelse语句,可以将各个条件执行的代码抽取成独立的方法。

Example1示例

35合并表达式

如果有一些if语句返回结果相同,则可以用||&&将这些if合并成一个if语句。Example2示例

36合并重复条件

如果ifelse语句中有相同重复的代码,请将这些代码移出ifelse语句。

Example3示例

37去除控制标记

 ifelse语句中如果某个变量有控制标记,用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    改变方法参数

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics