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().
接下来,随意替换原类中的类型码,以及进行其他重构。
写在最后,也应作为最初(只是当初忘了,直到暮然回首,才。。。)
为什么要使用Eclipse的重构菜单
长长的一句话: 虽然你可以手工改变代码中的某个元素,但是这样不能自动更新所有引用它们的地方,你必须逐条手工替换,而结果往往是漏掉一个或者改错一个。Eclipse等工具提供的菜单正是提供了智能的自动更新的功能。
最后承应标题,完成了纳米级的修改,下一步我们向微型结构出发。下一个系列将是简单的设计模式的讲解。
剩下还有一些重构手法,在本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等工具提供的菜单正是提供了智能的自动更新的功能。
最后承应标题,完成了纳米级的修改,下一步我们向微型结构出发。下一个系列将是简单的设计模式的讲解。
相关文章推荐
- Eclipse实战重构与测试(图解)1
- 计算日落日出时间算法与代码
- 今日因,明日果;
- Eclipse中自动重构实现探索
- 昨日之日不可留,明日之日未可知,今日之日胜千金。
- Eclipse 重构
- 2008年7月17号,晴天,我荒废的今日,正是昨日殒身之人祈求的明日————哈佛自习墙
- android_eclipse重构功能
- 详解Eclipse之重构
- 今日的习惯,决定了你明日的命运
- 利用Eclipse进行重构(下)
- 任何人都可以重构---使用 Eclipse 自动重构特性的方法与原因
- eclipse重构变量名的快捷键, 批量修改变量名的快捷键
- Eclipse重构——Move Method(I)
- Eclipse中自动重构实现探索
- Eclipse开发经典教程:代码重构(二)
- eclipse重构myeclipse web项目
- 利用Eclipse进行重构(上)
- 使用eclipse进行重构
- 利用Eclipse进行重构