跳转至

迪米特法则

约 557 个字 15 行代码 1 张图片 预计阅读时间 3 分钟

场景:第一天上班装电脑

小菜第一天上班领电脑:人事小杨介绍 IT 部小张;小张外出,小李推诿;无人协调,小菜空等一上午。大鸟指出:若存在 IT 主管统一分配任务,或只需找「IT 部」而不必认识具体同事,问题就解决了——这正是 迪米特法则 的职场版。

原则定义

迪米特法则(Law of Demeter,LoD),又称 最少知识原则

如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

前提

  • 每个类 尽量降低 成员的访问权限(private 封装)。
  • 根本思想:强调类之间的松耦合——耦合越弱,越有利于复用;修改一个类时,波及相关类越少越好。

与依赖倒转的关系

  • IT 部 → 抽象类或接口
  • 小张、小李 → 具体类
  • 客户端只依赖 IT 部 接口,由主管(或部门入口) 转发 调用——既满足 面向接口编程(DIP),也满足 最少知识(LoD)

打电话时应说「IT 部,电脑坏了」,而不是「小张在吗?小李在吗?」——减少对具体类的直接依赖。

简单对比

Java
// 违反 LoD:客户端直接操作多个子系统细节
class Client {
    void goHome() {
        new SubSystemA().operationA();
        new SubSystemB().operationB();
        new SubSystemC().operationC();
    }
}

// 更符合 LoD:只与 Facade(第三者)交互
class Client {
    void goHome() {
        new Facade().operation();
    }
}

这与 外观模式 紧密相关:Facade 作为 第三者,封装子系统,客户端 只知道 Facade

小结

要点 说明
别名 最少知识原则
目标 降低类间直接耦合
实践 只与直接朋友通信;复杂协作通过中介/Facade
收益 信息隐藏促进复用;内部人员变动不影响客户端

「无熟人难办事」的反面,是 好的架构让你不必认识所有人——只要认识对的 入口 就够了。

评论