网站大量收购独家精品文档,联系QQ:2885784924

重构方法和设计思路.docx

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
重构方法(1) - 提取方法描述:当你的代码中有一些片段在逻辑上能够归为一组,那么通常可以将这一组代码提取出来形成一个方法,并用方法名来解释方法的目的。动机:提高了其他方法重用这段代码的可能性。使得‘高层’的方法可读性更好。当有需要的时候,重载更加方便。步骤:创建一个新方法,以方法的目的为该方法命名(而不是以方法的具体行为为该方法命名)。把要提取的方法从原来的方法中拷贝到新方法中。检查提取的代码,看看其中是否有对原来方法中的局部变量的引用(通常IDE会帮我们做,会用编译错误来提示找不到变量)。如果有,将该变量作为方法的参数。检查在原方法中是否有只在提取的代码中使用的临时变量,如果有,将该变量移入提取的方法中。看看在第三步中的局部变量在方法中是否被改变了。如果只有一个局部变量被改变,那么我们可以将该变量作为方法的返回值返回。如果有多于一个的变量被改变,那么我们可能需要先进行分离临时变量(另外一种重构方法,以后介绍)重构,再进行提取方法的重构。我们以可以使用使用查询方法代替临时变量(另外一种重构方法,以后介绍)来减少临时变量的个数。编译代码,看看是否有错误。用提取的方法替换原来方法中被提取的代码。注意在原方法中删除第四步中我们移入的临时变量。编译,运行单元测试。例子:1.?没有局部变量的情况void printOwing(){?Enumeration e = _orders.elements();?double outstanding = 0.0;?//打印提示信息?System.out.println(“************************”);?System.out.println(“***** CustomerOwes *****”);?System.out.println(“************************”);?//计算应付金额?while (e.hasMoreElements()) { Order each = (Order) e.nextElement(); outstanding??+= each.getAmount();?}?//打印详细信息?System.out.println(“name:” +_name);?System.out.println(“amount:” +outstanding);}复制代码在这里,我们可以很容易的将打印提示信息的部分代码提取成单独的方法。void printOwing(){?Enumeration e = _orders.elements();?double outstanding = 0.0;?printBanner();?//计算应付金额?while (e.hasMoreElements()) { Order each = (Order) e.nextElement(); outstanding??+= each.getAmount();?}?//打印详细信息?System.out.println(“name:” +_name);?System.out.println(“amount:” +outstanding);}void printBanner(){?System.out.println(“************************”);?System.out.println(“*****Customer Owes *****”);?System.out.println(“************************”);}复制代码2.?提取代码中读取局部变量的情况还是使用上面的代码,我们来提取打印详细信息的方法。void printOwing(){?Enumeration e = _orders.elements();?double outstanding = 0.0;?printBanner();?//计算应付金额?while (e.hasMoreElements()) { Order each = (Order) e.nextElement(); outstanding??+= each.getAmount();?}?printDetail(outstanding);}voidprintBanner(){?System.out.println(“************************”);?System.out.println(“*****Customer Owes *****”);?System.out.println(“************************”);}voidprintDetail(double outstanding){?System.out.println(“name:” +_nam

文档评论(0)

wuyoujun92 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档