重构手法——对象结构优化类 | 类关系解耦 | 删除中间人

56 阅读1分钟

简介

"删除中间人"(Remove Middle Man)重构手法用于消除不必要的委托调用链。当某个类只是简单转发调用到另一个对象时,应该让客户端直接访问目标对象。

典型代码坏味道

  • 类中存在大量委托方法
  • 方法仅做简单调用转发
  • 类职责过度偏向消息传递
  • 多层嵌套的委托调用

重构步骤

  1. 识别中间人

    • 找到仅转发调用的方法
    • 分析方法的调用层级
    • 确认被委托对象的可见性
  2. 调整客户端调用

    • 将直接调用替换为最终目标调用
    • 处理链式调用中的空值问题
    • 更新相关单元测试
  3. 移除委托方法

    • 删除中间转发方法
    • 保持必要业务逻辑方法
    • 处理接口兼容性问题
  4. 验证与测试

    • 检查调用链缩短后的性能
    • 验证目标对象状态完整性
    • 确保异常处理不受影响

示例

重构前:

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

专项练习

基础练习

  1. 重构订单处理委托

    class Order {
        private Customer customer;
    
        public String getAddress() {
            return customer.getAddress();
        }
    }
    

进阶练习

  1. 多层委托处理

    class Company {
        private HRDepartment hr;
    
        public Employee getCEO() {
            return hr.getExecutive().getCEO();
        }
    }
    

代码审查清单

优势验证

  • 调用链长度减少50%以上
  • 消除不必要的耦合关系
  • 提高代码可读性

风险提示

  • 可能暴露内部实现细节
  • 需要处理空引用问题
  • 破坏封装性原则