中间人指的是一种过度使用委托的代码,《重构》中给了一个参考值,如果一个类中有一半的方法都委托给其他对象进行, 为什么中间人是一种代码坏味道? 过度使用委托。这意味着当需求发生某些的变化的时候,这个中间人的类总是被牵连进来一并修改。这种中间人代码越多,浪费掉的时间也就越多。 如何解决中间人这种代码坏味道? 中间人的代码在于
实际代码就是一长串的getThis()或者一长串临时变量。 使用隐藏“委托关系”(这个后面会讲)来进行重构。当然了,可以在消息链的任何位置运用。 十六、Middle Man(中间人) 过度运用委托。 1、某个类接口有一半的函数都委托给其他类,这时应“移除中间人”:让客户直接调用委托类。 2、如果只有少数几个函数,那就直接...
实际代码中你看到的可能是一长串getXXX()调用,意味着客户代码将与查找目标对象过程中的导航结构紧密耦合,一旦对象间的关系发生任何变化,客户端就会受到影响。 中间人(Middle Man) 对象的基本特征之一是封装——对外部世界隐藏其内部细节。封装往往伴随着委托,比如你问主管是否有时间参加一个会议,他就把这个消息“委托...
public class Order { private String id; private double amount; } public class OrderProcessor { public void processOrder(Order order) { // 实际的订单处理逻辑 } } public class OrderManager { // 中间人 private OrderProcessor processor; public OrderManager(OrderProcessor processor) { this.processor ...
难以修改: 发散式修改(类/函数承载了过多功能)、霰弹式修改(有一处修改,其他地方也需要修改) 可有可无:注释、重复代码、冗赘类/元素、数据类、死代码、夸夸其谈未来性 耦合: 依恋情结(需要调用一堆接口来实现一个功能)、内幕交易、消息链、中间人 神秘命名、全局数据、可变数据、循环语句 二...
2.10. 中间人类 2.10.1. 仅将功能委托给其他对象2.10.2. 舍弃中间人直接和处理相应职责的类进行交互2.10.3. 将其与现有类合并 2.11. 孤立的变量和常量类 2.11.1. 使用一个独立的类来定义系统不同部分使用的变量和常量2.11.2. 丢失其上下文而无法表达任何实际含义2.11.3. 移动到使用它们的位置 2...
但是这一 步不能走得太远,假如你发现一个类接口的一大半方法都在做分派,你可能需 要移去这个中间 人。 � 16. Inappropriate Intimacy � 某些类相互之间太亲密,它们花费了太多的时间去砖研别人的私有部分。对 人类而言,我们也许不应该太假正经,但我们应当让自己的类严格遵守禁欲主 义。 � 17. ...
移除中间人 步骤 为受托对象创建一个取值函数 对于每个委托函数,让其客户端转为连续的访问函数调用。每次替换后运行测试 替换算法 步骤 整理一下待替换的算法,保证它已经被抽取到一个独立的函数中 先只为这个函数准备测试,以便固定它的行为 准备好另一个(替换用)算法 执行静态检查 子主题 搬移特性 ...
重复代码就是不同地点,有着相同的程序结构。一般是因为需求迭代比较快,开发小伙伴担心影响已有功能,就复制粘贴造成的。重复代码很难维护的,如果你要修改其中一段的代码逻辑,就需要修改多次,很可能出现遗漏的情况。 如何优化重复代码呢?分三种情况讨论: 同一个类的两个函数含有相同的表达式 ...
这样的代码容易让人不解,因为你通常认为对象在所有时候都需要它的所有变量。 在变量未被使用的情况下猜测当初设置目的,会让你发疯。 14. 无用的中间人过度使用委托。你也许会看到某个类的接口有一半的函数都委托给其他类,这样就过度运用了。所以,删除无用的中间人。 15. 狎昵关系有时你会看到两个类过于亲密,...