摘要: 概括 客户通过一个委托类来调用另一个对象。 在服务类上建立客户所需要的所有函数,用以隐藏委托关系。 例子 动机 如果某个客户先通过服务对象的字段得到另一个对象,然后调用后者的函数,那么客户就必须知晓这一层委托关系。 如果委托关系发生变化,客户也要发生变化。 可以在服务对象上放置一个简单的委托函数,将委托关系隐藏起来,从而去除这种依赖。做法.实践.来自为知笔记(W... 阅读全文
posted @ 2013-11-28 10:43 tanhaiyuan 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 概括 某个类没有做太多事情。 将这个类的所有特性搬移到另一个类中,然后移除原类。 例子.动机.做法.实践.来自为知笔记(Wiz) 阅读全文
posted @ 2013-11-28 10:31 tanhaiyuan 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 概括 某个类做了应该由两个类做的事。 建立一个新类,将相关的字段和函数从旧类搬移到新类。 例子.动机 类中含有大量方法和数据。 类的子类化。做法.实践.来自为知笔记(Wiz) 阅读全文
posted @ 2013-11-28 10:21 tanhaiyuan 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 概括 程序中,某个字段被其所属了之外的另一个类更多的用到。 在目标类新建一个字段,修改源字段的所有用户,令它们改用新字段。 例子.动机 在类之间移动状态和行为,是重构过程中必不可少的措施。 如果发现,对于一个字段,在其所属了之外的另一个类中有更多函数使用了它,此时应考虑搬移这个字段。也可能移动该字段的用户(某个函数),这取决于接口。 使用Extract Class... 阅读全文
posted @ 2013-11-28 10:20 tanhaiyuan 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 概括 程序中,有个函数与其所属类之外的另一个类进行更多的交流:调用后者或被后者调用。 在该函数最常引用的类中建立一个有类似行为的新函数,将旧函数变成一个单纯的委托函数,或将旧函数完全移除。 例子.动机.做法.实践.来自为知笔记(Wiz) 阅读全文
posted @ 2013-11-28 10:19 tanhaiyuan 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 概括 把某个算法替换为另一个更清晰的算法。 将函数本体替换为另一个算法。 例子String foundPerson(String[] people){ for (int i = 0; i < people.length; i++) { if (people[i].equals ("Don")){ return "Don"; } if (people[... 阅读全文
posted @ 2013-11-27 15:12 tanhaiyuan 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 概括 大型函数中对局部变量的使用使得无法采用Exrtact Method方法。 将此函数放进一个单独对象中,此时局部变量就成了对象内的字段。然后可以在同一个对象中将这个大型函数分解为多个小型函数。 例子class Order{ ... double price(){ double primaryBasePrice; double secondaryBasePrice; ... 阅读全文
posted @ 2013-11-27 15:00 tanhaiyuan 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 概括代码对一个参数进行赋值。以一个临时变量取代该参数的位置。 例子int discount(int inputVal, int quantity, int yearTodate){ if(inputVal > 50) inputVal = -2;}重构后int discount(int inputVal, int quantity, int yearTodate){ int result =... 阅读全文
posted @ 2013-11-27 14:44 tanhaiyuan 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 概括 某个临时变量被赋值超过一次,且它既不是循环变量,也不是被用于收集计算结果。 针对每次赋值,创造一个独立,对应的临时变量。 例子double temp = 2 * (_height + _width);System.out.println(temp);temp = _height * _width;System.out.println(temp);重构后final double... 阅读全文
posted @ 2013-11-27 14:29 tanhaiyuan 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 概括 你有一个复杂的表达式。 将该复杂表达式(或其中一部分)的结果放进一个临时变量,以此变量名来解释表达式用途。 例子if((platform.toUperCase().indexOf("MAC") > -1) && (browser.toUperCase().indexOf("IE") > -1) && wasInitialized() && resize > 0 ){ //do... 阅读全文
posted @ 2013-11-27 14:10 tanhaiyuan 阅读(228) 评论(0) 推荐(0) 编辑