1. 定义
要求一个对象对其他对象保持最少了解,仅与"直接朋友"交互(包括:自身成员变量、方法参数、方法内创建的对象),避免连环调用(如a.getB.getC.doSomething)。
2. 代码示例
违反原则的调用链:
```java
// 错误示例:直接访问间接对象的方法
customer.getOrder.getItem.updateStock;
```
改进后符合LoD的实现:
```java
// 正确示例:委托给直接朋友处理
customer.updateOrderItemStock;
// Customer类内部实现:
public void updateOrderItemStock {
this.order.updateItemStock;
```
1. 设计隐喻
迪米特法则被比喻为代码的"社交恐惧症"——每个对象像社恐人士一样,只愿与熟悉对象(直接朋友)交流,拒绝嵌套的依赖关系。
2. 实际收益
1. 分层架构
控制器层不应直接访问数据库层,需通过服务层中转。
2. 对象封装
汽车对象提供`startEngine`方法,内部隐藏火花塞、燃油泵等组件的操作细节。
3. API设计
返回不可变集合(如`Collections.unmodifiableList`),防止外部对象直接修改内部状态。
1. 与单一职责原则互补
迪米特法则约束对象间交互,单一职责约束对象自身功能。
2. 与合成复用原则协同
优先通过组合(has-a)而非继承(is-a)复用功能,减少继承链带来的隐性依赖。
如需完整代码示例或特定场景实现方案,可进一步说明具体需求方向。