快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-25
的引用。

public String statement() {  ……  double thisAmount = each.getCharge();  …… }

4、除去临时变量thisAmount。

选中变量thisAmount,在右键菜单中选择"重构/内联",重构预览窗口如下,可见达到了重构的目的。按下"确认"按钮重构代码。

statement()代码:

public String statement() {
 double totalAmount = 0; // 总消费金额
 int frequentRenterPoints = 0; // 常客积点
 Enumeration rentals = _rentals.elements();
 String result = "Rental Record for " + getName() + "\n";
 while(rentals.hasMoreElements()){
  Rental each = (Rental)rentals.nextElement(); //取得一笔租借记录
  // add frequent renter points(累加 常客积点)
  frequentRenterPoints ++;
  // add bouns for a two day new release rental
  if((each.getMovie().getPriceCode())==Movie.NEW_RELEASE && each.getDaysRented()>1)
   frequentRenterPoints ++;
  // show figures for this rental(显示此笔租借数据)
  result += "\t" + each.getMovie().getTitle() + "\t" +
  String.valueOf(each.getCharge()) + "\n";
  totalAmount += each.getCharge();
 }
 // add footer lines(结尾打印)
 result += "Amount owed is " + String.valueOf(totalAmount) + "\n";
 result += "You earned " + String.valueOf(frequentRenterPoints) + " frequent renter points";
 return result;
} 

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

时间:2009-11-02

四、重构第三步:提炼"常客积点计算"代码

目的:提取"常客积点计算"代码并放在Rental类中,"常客积点计算"代码如下。

public String statement() {  ……  // add frequent renter points  frequentRenterPoints ++;  // add bouns for a two day new release rental  if((each.getMovie().getPriceCode())==Movie.NEW_RELEASE && each.getDaysRented()>1)   frequentRenterPoints ++;   …… }

重构后的代码如下:

frequentRenterPoints += each.getFrequentRenterPoints();

重构方法:

Extract Method

Move Method

Change Method signatrue

Inline Method

方法:

1、首先,抽取代码到独立的函数中。

用"抽取方法"重构代码,函数名:getFrequentRenterPoints。很遗憾,eclipse的不能生成诸如:frequentRenterPoints += getFrequentRenterPoints(Rental aRental); 的代码。原因是执行自增操作的局部变量frequentRenterPoints要出现在等式右边,因此抽取函数getFrequentRenterPoints()一定要把frequentRenterPoints作为参数。手工修改函数和对函数的引用,重构后的代码如下:

public String statement() {  ……  while(rentals.hasMoreElements()){   ……   frequentRenterPoints += getFrequentRenterPoints(each);   ……  }  …… } /** * @param each * @return */ private int getFrequentRenterPoints(Rental each) {  if((each.getMovie().getPriceCode())==Movie.NEW_RELEASE && each.getDaysRented()>1)   return 2;  else   return 1; }

2、把getFrequentRenterPoints()移动到Rental类中。

3、对getFrequentRenterPoints()"更改方法特征符"为public。

4、对Customer的函数getFreque

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号