快速业务通道

Eclipse中自动重构实现探索 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-25
ntRenterPoints()执行内联操作,重构目标完成。

Eclipse中自动重构实现探索(5)

时间:2009-11-02

五、重构第四步:去除临时变量(totalAmount和frequentRenterPoints)

目的:去除临时变量(totalAmount和frequentRenterPoints)

方法:

1、分析totalAmount和frequentRenterPoints的定义和引用结构如下:

// 声明和定义 double totalAmount = 0; int frequentRenterPoints = 0; …… // 在循环中修改 while(rentals.hasMoreElements()){  ……  frequentRenterPoints += each.getFrequentRenterPoints();  ……  totalAmount += each.getCharge();  …… } …… // 在循环外使用 result += "Amount owed is " + String.valueOf(totalAmount) + "\n"; result += "You earned " + String.valueOf(frequentRenterPoints) + " frequent renter points"; ……

上述两个变量在循环体外面定义和使用,在循环中被修改,运用Replace Temp with Query方法去除这两个临时变量是一项稍微复杂的重构。很遗憾,eclipse目前不支持这样的重构。

2、手工修改代码。

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

目的:

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); }

Eclipse中自动重构实现探索(6)

时间:2009-11-02

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; }

七、重构

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号