1、Extract Method(提炼函数)

重构前:

void printOwing(double amount){printBanner();//print details        System.out.println("name:" + _name);System.out.println("amount" + amount);
}

重构后:

void printOwing(double amount){printBanner();printDetails(amount);
}void printDetails(double amount){System.out.println("name:" + _name);System.out.println("amount" + amount);
}

2、Inline Method(内联函数)

重构前:

int getRating(){return (moreThanFiveLateDeliveries()) ? 2 : 1;
}boolean moreThanFiveLateDeliveries(){return _numberOfLateDeliveries > 5;
}

重构后

int getRating(){return (_numberOfLateDeliveries > 5) ? 2 : 1;
}

3、Inline Temp(内联临时变量)

重构前:

double basePrice = anOrder.basePrice();
return (basePrice > 1000);

重构后:

return (anOrder.basePrice() > 1000);

4、Replace Temp with Query(以查询取代临时变量)

重构前:

double basePrice = _quantity * _itemPrice;
if(basePrice > 1000)return basePrice * 0.95;
elsereturn basePrice * 0.98;

重构后:

if(basePrice() > 1000)return basePrice() * 0.95;
elsereturn basePrice() * 0.98;double basePrice(){return _quantity * _itemPrice;
}

5、Introduce Explaining Variable(引入解释性变量)

重构前:

if((platform.toUpperCase().indexOf("MAC") > -1) &&(browser.toUpperCase().indexOf("IE") > -1) &&wasInitialized() && resize > 0)
{//do something
}

重构后:

final boolean isMacOs = platform.toUpperCase().indexOf("MAC") > -1;
final boolean isIEBrowser = browser.toUpperCase().indexOf("IE) > -1;
final boolean wasResized = resize > 0;if(isMacOs && isIEBrowser && wasInitialized() && wasResized){//do something
}

6、Split Temporary Variable(分解临时变量)

重构前:

double temp = 2 * (_height + _width);
System.out.println(temp);
temp = _height * _width;
System.out.println(temp);

重构后:

final double perimeter = 2 * (_height + _width);
System.out.println(perimeter);
final double area = _height * _width;
System.out.println(area);

7、Remove Assignments to Parameters(移除对参数的赋值)

重构前:

int discount(int inputVal, int quantity, int yearToDate){if(inputVal > 50)inputVal -= 2;
}

重构后:

int discount(int inputVal, int quantity, int yearToDate){int result = inputVal;if(inputVal > 50)result -= 2;
}

8、Replace Method with Method Object(以函数对象取代函数)

9、Substitute Algorithm(替换算法)

重构前:

String foundPerson(String[] people){for(int i = 0; i < people.length; i++){if(people[i].equals("Don")){return "Don";}      if(people[i].equals("John")){return "John";}  if(people[i].equals("Kent")){return "Kent";} }return "";
}

重构后:

String foundPerson(String[] people){List candidates = Arrays.asList(new String[] {"Don", "John", "Kent"});for(int i = 0; i < people.length; i++){if(candidates.contains(people[i]))return people[i];}  return "";
}

转载于:https://www.cnblogs.com/dongerlei/p/5162929.html

重构手法(一)之重新组织函数相关推荐

  1. 重构手法——提炼函数、搬移函数、以多态取代条件表达式

    目录 我的心路历程 我的学习概括 Extract Method(提炼函数) 动机*--做法 动机--做法* Move Method(搬移函数) 动机*--做法 动机--做法* Replace Cond ...

  2. 重构手法之重新组织函数

    重构手法之重新组织函数 在重构的手法中,很大的一部分是对函数进行整理,使函数能够恰当地包装代码(让代码自己说话而不是写更多的注释).重新组织函数的驱动力,往往都是由于函数过长.因为函数过长就以为着包含 ...

  3. 重构-改善既有代码的设计:重新组织函数的九种方法(四)

    函数过长或者逻辑太混乱,重新组织和整理函数的代码,使之更合理进行封装. 1. Extract Method 提炼函数 提炼函数:(由复杂的函数提炼出独立的函数或者说大函数分解成由小函数组成) 你有一段 ...

  4. 重新组织函数--《重构》阅读笔记

    1)寻找引用点时,最好使用工具,然后再人工review.在看到这个问题的时候,我估计应该是很久之前了.现在用IDE.这个要方便很多. 2)重新组织函数的方法和目标. 其实目标很简单.就是消灭长函数. ...

  5. 《重构》-重新组织函数

    重构 重新组织函数 1.Extract Method(提炼函数) a. 原因如果有一个过长的函数或者需要一段注释才能让人理解用途的代码,那么就将这段代码放进一个独立函数中.b. 好处函数粒度小,被复用 ...

  6. 重构手法之简化函数调用【1】

    返回总目录 本小节目录 Rename Method(函数改名) Add Parameter(添加参数) Remove Parameter(移除参数) 1Rename Method(函数改名) 概要 函 ...

  7. 重构改善既有代码设计--重构手法19:Replace Data Value with Object (以对象取代数据值)...

    你有一笔数据项(data item),需要额外的数据和行为. 将这笔数据项变成一个对象. class Order... private string customer; ==> class Or ...

  8. 重构手法之重新组织数据【1】

    返回总目录 本小节目录 Replace Data Value with Object(以对象取代数据值) Change Value to Reference(将值对象改为引用对象) Change Re ...

  9. 重构改善既有代码设计--重构手法11:Move Field (搬移字段)

    你的程序中,某个字段被其所驻类之外的另一个类更多的用到.在目标类建立一个新字段,修改源字段的所有用户,令它们改用新字段.        动机:在类之间移动状态和行为,是重构过程中必不可少的措施.随着系 ...

最新文章

  1. layui如何获取父节点的父节点_layui框架中layer父子页面交互的方法分析
  2. java 中怎么加汉字,jquery怎么向body里面增加文字
  3. ThinkPHP对Cookie的支持
  4. Android集成第三方微信登录
  5. Visualization的学习笔记
  6. ubuntu下搭建tftp服务器并且验证功能
  7. AFNetworking网络请求的get和post步骤
  8. php的md5(),PHP中MD5函数效率
  9. iOS人脸识别(检测)
  10. 51单片机带闹钟c语言程序,51单片机编写的闹钟程序
  11. Random类:用来产生随机数字
  12. GUI(Graphic User Interface) 图形用户界面
  13. 怎么制作动态图片?教你三步制作GIF图片?
  14. PDF如何删除页面?批量删除不连续页的方法
  15. 微信小程序:修复图片音频全新升级带特效喝酒神器源码
  16. 基础知识贴----用好用活N93(完)
  17. 打造全栈安全防护体系,华为云等保合规解决方案帮企业30天过等保
  18. 计算机专业项目化教学,中职计算机专业实训课项目化教学实践探索
  19. 【NOIP2016】bzoj4719 天天爱跑步
  20. XStream的简单使用

热门文章

  1. mysql 修改表结构提示 MySQL said: Table is read only
  2. 干货 | DevSecOps在携程的最佳实践
  3. Spring Boot 性能优化
  4. 系统设计:性能指标、伸缩性、扩展性、可用性、安全性
  5. android编程获取网络和wifi状态及调用网络设置界面,Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面 - Android平台开发技术 - 博客园...
  6. Linux中如何java联网,如何在Java中运行Linux命令?
  7. oracle pcm x6-2,Sun 7310210服务器Oracle X6-2原装拆机内存7310244 7090170
  8. 网络故障排除工具 | 快速定位网络故障
  9. Gartner:基础设施和运营领域10大技术趋势
  10. 区域链结构对于数据中心有什么影响?这个影响是好是坏呢!