,Java   工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛,Java
您的位置:Yesky > 软件 > 开发者网络 > 正文
Eclipse中自动重构实现探索
[文章信息]
作者:张昱
时间:2005-05-10
出处:blogchina
责任编辑:方舟
[文章导读]
本文的目的是探索Eclipse自动重构可以在多大程度上辅助重构这个过程
advertisement
热点推荐
· 图文详解:黑客入侵方式演示
· Java异常处理的陋习展播
· 多媒体系列教程:网页设计制作
· Powerpoint动画演示教程连载
· 光盘刻录手册:禁忌与技巧(下)
[正文]

上一页  1 2 3 4  

  六、重构第五步:运用多态取代与价格相关的条件逻辑

  目的:

  1、 把Rental类中的函数getCharge()移动到Movie类中。

  2、 把Rental类中的函数getFrequentRenterPoints()移动到Movie类中。

  重构方法:

  Move Method
  Inline Method

  方法:

  1、 选中Rental类中的函数getCharge(),右键菜单选中"重构/移动",eclipse提示找不到接收者,不能移动。原因在于这行语句:

switch(getMovie().getPriceCode()){//取得影片出租价格

  选中getMovie(),右键菜单选中"重构/内联",确定后代码成为:

switch(_movie.getPriceCode()){ //取得影片出租价格

  选中getCharge(),执行"重构/移动"后,函数被移动到Movie类中。然而这只是部分达成了重构目的,我们发现,移动后的代码把Rental作为参数传给了getCharge(),手工修改一下,代码变成:

class Movie ……
/**
* @param this
* @return
*/
public double getCharge(int _daysRented) {
 double result = 0;
 switch(getPriceCode()){ //取得影片出租价格
  case Movie.REGULAR: // 普通片
   result += 2;
   if(_daysRented>2)
    result += (_daysRented-2)*1.5;
   break;

  case Movie.NEW_RELEASE: // 新片
   result += _daysRented*3;
   break;

  case Movie.CHILDRENS: // 儿童片
   result += 1.5;
   if(_daysRented>3)
    result += (_daysRented-3)*1.5;
   break;
 }
 return result;
}

class Rental……
/**
* @param this
* @return
*/
public double getCharge() {
 return _movie.getCharge(_daysRented);
}

  2、用同样的步骤处理getFrequentRenterPoints(),重构后的代码:

class Movie ……
/**
* @param frequentRenterPoints
* @param this
* @return
*/
public int getFrequentRenterPoints(int daysRented) {
 if((getPriceCode())==Movie.NEW_RELEASE && daysRented>1)
  return 2;
 else
  return 1;
}
class Rental……
/**
* @param frequentRenterPoints
* @param this
* @return
*/
public int getFrequentRenterPoints(int daysRented) {
 if((getPriceCode())==Movie.NEW_RELEASE && daysRented>1)
  return 2;
 else
  return 1;
}

  七、重构第六步:终于……我们来到继承

  目的:对switch语句引入state模式。

  方法:

  很遗憾,不得不在这里提前结束eclipse的自动重构之旅。Eclipse几乎不能做结构上的重构。也许Martin Fowler在书中呼唤的自动重构工具止于"工具辅助下的重构工作"这一理念。艺术是人类的专利,编程艺术的梦想将持续下去。

  感兴趣的读者可以查看手工重构的最后一步代码。将重构进行到底!

  附录:eclipse支持的重构方法(摘自eclipse中文帮助)

名称 功能
撤销 执行上一次重构的"撤销"。只要除了重构之外尚未执行任何其它源更改,重构撤销缓冲区就有效。
重做 执行上一次撤销重构的"重做"。只要除了重构之外尚未执行任何其它源更改,重构撤销/重做缓冲区就有效。
重命名 启动"重命名"重构对话框:重命名所选择的元素,并更正对元素的所有引用(如果启用了的话)(还在其它文件中)。可用于:方法、字段、局部变量、方法参数、类型、编译单元、包、源文件夹和项目,以及解析为这些元素类型中的其中一种的文本选择部分。
移动 启动"移动"重构对话框:移动所选择的元素,并更正对元素的所有引用(如果启用了的话)(还在其它文件中)。适用于:一个实例方法(可以将它移至某个组件)、一个或多个静态方法、静态字段、类型、编译单元、包、源文件夹和项目,以及解析为这些元素类型中的其中一种的文本选择部分。
更改方法特征符 启动"更改方法特征符"重构对话框。更改参数名称、参数类型和参数顺序,并更新对相应方法的所有引用。此外,可以除去或添加参数,并且可以更改方法返回类型和它的可视性。可以将此重构应用于方法或解析为方法的文本选择。
将匿名类转换为嵌套类 启动"将匿名类转换为嵌套类"重构对话框。帮助您将匿名内部类转换为成员类。可以将此重构应用于匿名内部类。
将嵌套类型转换成顶层 启动"将嵌套类型转换为顶层类型"重构对话框。为所选成员类型创建新的 Java 编译单元,并根据需要更新所有引用。对于非静态成员类型,将添加字段以允许访问先前的外围实例。可以将此重构应用于成员类型或解析为成员类型的文本。
下推 启动"下推"重构对话框。将一组方法和字段从一个类移至它的子类。可以将此重构应用于在同一个类型中声明的一个或多个方法和字段或者字段或方法内的文本选择。
上拉 启动"上拉"重构型中声明的一个或多个方法、字段和成员类型,也可以应用于字段、方法或成员类型内的文本选择。向导。将字段或方法移至其声明类的超类或者(对于方法)将方法声明为超类中的抽象类。可以将此重构应用于在同一个类
抽取接口 启动"抽取接口"重构对话框。使用一组方法创建新接口并使选择的类实现该接口,并尽可能地将对该类的引用更改为对新接口的引用(可选)。可以将此重构应用于类型。
尽可能使用超类型 启动"尽可能使用超类型"对话框。将某个类型的出现替换为它的其中一个超类型,在执行此替换之前,需要标识所有有可能进行此替换的位置。此重构可用于类型。
内联 启动"内联"重构对话框。内联局部变量、方法或常量。此重构可用于方法、静态终态字段和解析为方法、静态终态字段或局部变量的文本选择。
抽取方法 启动"抽取方法"重构对话框。创建一个包含当前所选择的语句或表达式的新方法,并将选择替换为对新方法的引用。可以使用编辑菜单中的扩大选择至以获取有效的选择范围。此功能对于清理冗长、杂乱或过于复杂的方法是很有用的。
抽取局部变量 启动"抽取变量"重构对话框。创建为当前所选择的表达式指定的新变量,并将选择替换为对新变量的引用。此重构可用于解析为局部变量的文本选择。可以使用编辑菜单中的扩大选择至以获取有效的选择范围。
抽取常量 启动"抽取常量"重构对话框。从所选表达式创建静态终态字段并替换字段引用,并且可以选择重写同一表达式的其它出现位置。此重构可用于静态终态字段和解析为静态终态字段的文本选择。
将局部变量转换为字段 启动"将局部变量转换为字段"重构对话框。将局部变量转换为字段。如果该变量是在创建时初始化的,则此操作将把初始化移至新字段的声明或类的构造函数。此重构可用于解析为局部变量的文本选择。
封装字段 启动"自封装字段"重构对话框。将对字段的所有引用替换为 getting 和 setting 方法。它适用于所选择的字段或解析为字段的文本选择。

上一页  1 2 3 4  

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 
,Java相关内容,Java焦点新闻
  • 为Java应用程序添加退出事件响应
  • 用Java实现FTP服务器解决方案
  • Java源码分析:深入探讨Iterator模式
  • 菜鸟初学Java的备忘录之第一次接触
  • 浅析Java中Data类的应用
  • FVD刺激高清碟机加速商业化 抢占商机最重要
  • 3家搜索引擎集体诉讼8848 吕春维未敢出席
  • 杨元庆:没有准备不会获批的备用方案
  • 军队信息化诞生新领域 电子军务呼之欲出
  • 世界经济论坛公布信息化程度全球最新排名
  • 2004政务绩效评估:政府门户尚处于发展阶段
  • 甲骨文出资5.15亿美元 意图收购RetekInc
  • 技术并购:帮你突破传统增长的“天花板”
  • ,JavaAdvertisement