首页/开发/代码质量与评审速查/迪米特法则(Law of Demeter)
设计原则与模式62 条

迪米特法则(Law of Demeter)

对象只与「直接朋友」通信:优先调用自身、参数、自建对象的方法,避免 a.getB().getC().do();降低对对象图结构的耦合,但不必教条化。

别名最少知识原则
允许自身/字段/参数/返回值上的调用
限制对返回对象再取对象继续调用

正反例

正反例
// 违反:链式穿越
getZipCode(p) { return p.getAddress().getZip(); }

// 改善:对象内自答
p.zipCode()
流式 API、DTO 组装场景常有例外:判断依据是「对象图结构是否成为外部依赖」。

易错点

  • 机械禁止一切链式调用:流式构造与集合操作无处安放
  • 为绕过法则加一堆转发方法:中间人坏味道出现

数据来源与参考

  • Northeastern University 迪米特法则研究(Karl Lieberherr 等);《Clean Code》引用
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌