简介
"删除中间人"(Remove Middle Man)重构手法用于消除不必要的委托调用链。当某个类只是简单转发调用到另一个对象时,应该让客户端直接访问目标对象。
典型代码坏味道
- 类中存在大量委托方法
- 方法仅做简单调用转发
- 类职责过度偏向消息传递
- 多层嵌套的委托调用
重构步骤
-
识别中间人
- 找到仅转发调用的方法
- 分析方法的调用层级
- 确认被委托对象的可见性
-
调整客户端调用
- 将直接调用替换为最终目标调用
- 处理链式调用中的空值问题
- 更新相关单元测试
-
移除委托方法
- 删除中间转发方法
- 保持必要业务逻辑方法
- 处理接口兼容性问题
-
验证与测试
- 检查调用链缩短后的性能
- 验证目标对象状态完整性
- 确保异常处理不受影响
示例
重构前:
class Person {
private Department department;
public Person getManager() {
return department.getManager();
}
}
class Department {
private Person manager;
public Person getManager() {
return manager;
}
}
重构后:
class Person {
public Department department;
}
class Department {
public Person manager;
}
// 客户端直接访问:person.department.manager
专项练习
基础练习
-
重构订单处理委托
class Order { private Customer customer; public String getAddress() { return customer.getAddress(); } }
进阶练习
-
多层委托处理
class Company { private HRDepartment hr; public Employee getCEO() { return hr.getExecutive().getCEO(); } }
代码审查清单
优势验证
- 调用链长度减少50%以上
- 消除不必要的耦合关系
- 提高代码可读性
风险提示
- 可能暴露内部实现细节
- 需要处理空引用问题
- 破坏封装性原则