您的位置:首页 > 编程语言 > Java开发

Eclipse重构——写在今日日落,期待明日日出

2013-04-15 22:21 295 查看
《重构——改善既有代码》

剩下还有一些重构手法,在本blog系列《Eclipse重构——总章》中有提及,这些重构可以应用基本的Eclipse重构菜单,按照Martin Flower的建议步骤,亦步亦趋的完成。下面只是再特别强调几个。(更多的Eclipse重构菜单的使用,可以参考点击打开链接

1. [Introduce Factory],Eclipse中有直接对应菜单, 可以直接将构造函数用静态方法封装,做成简单工厂形式,同时会自动将原来直接使用new xxx的代码替换为create_xxx()。这手法与[Encapsulate Field]一样, 简单却是基础。

在应用[Replace Typecode with Subclass]时,该方法就是第一步,然后简单引入switch语句,根据类型码,创建对应的子类。这一步是很关键的,后面的都是水到渠成的事情。

2. [Push Down] ,[Push Up]

两者在Eclipse Refactor菜单中都有直接对应选项,这里友情提示:其中的[preview]选项,可以控制选择具体对哪些类进行操作。

例如,有时候只有部分子类需要push down(重写父类方法),这时就可以在[preview]选项中控制。

3. [Replace Typecode with State/Strategy ]
这个重构是其他基本重构操作的组合,关键点在于

a. [Ecapsulate Field],将 记录当前typecode的成员变量封装起来,得到get /set

b. 将各类型码的定义,复制到State/Strategy基类中,同时 在该基类中实现setTypecode( <typecode>), 一般是简单的switch case形式。

c. 在各派类中实现getTypecode().

接下来,随意替换原类中的类型码,以及进行其他重构。

abstract class PermissionState {
public final static String REQUESTED = "REQUESTED";
public final static String CLAIMED = "CLAIMED";

public abstract String getState() ;  // override by subclass
public PermissionState setState(String state) { //switch REQUESTED, CLAIMED
switch(state) {
case REQUESTED:
return new Requested();
case CLAIMED:
return new Claimed();
default:
throw new RuntimeException("type error");
}
}
}


写在最后,也应作为最初(只是当初忘了,直到暮然回首,才。。。)

为什么要使用Eclipse的重构菜单

长长的一句话: 虽然你可以手工改变代码中的某个元素,但是这样不能自动更新所有引用它们的地方,你必须逐条手工替换,而结果往往是漏掉一个或者改错一个。Eclipse等工具提供的菜单正是提供了智能的自动更新的功能。



最后承应标题,完成了纳米级的修改,下一步我们向微型结构出发。下一个系列将是简单的设计模式的讲解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: