迪米特法则

简介: 定义迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。英文简写为: LoD.模式与意义迪米特法则可以简单说成:talk only to your immediate friends。

定义

迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。英文简写为: LoD.

模式与意义

迪米特法则可以简单说成:talk only to your immediate friends。 对于OOD来说,又被解释为下面几种方式:一个软件实体应当尽可能少的与其他实体发生相互作用。每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。

迪米特法则不希望类之间建立直接的联系。如果真的有需要建立联系,也希望能通过它的友元类来转达。因此,应用迪米特法则有可能造成的一个后果就是:系统中存在大量的中介类,这些类之所以存在完全是为了传递类之间的相互调用关系——这在一定程度上增加了系统的复杂度。
有兴趣可以研究一下设计模式的门面模式(Facade)和中介模式(Mediator),都是迪米特法则应用的例子。
值得一提的是,虽然Ian Holland对计算机科学的贡献也仅限于这一条法则,其他方面的建树不多,但是,这一法则却不仅仅局限于计算机领域,在其他领域也同样适用。比如,美国人就在航天系统的设计中采用这一法则。

问题由来

类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。

初衷

迪米特法则的初衷在于降低类之间的耦合。由于每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系。

缺点

迪米特法则不希望类之间建立直接的联系。如果真的有需要建立联系,也希望能通过它的友元类来转达。应用迪米特法则有可能造成的一个后果就是:系统中存在大量的中介类,这些类之所以存在完全是为了传递类之间的相互调用关系——这在一定程度上增加了系统的复杂度

举例

总公司、子公司、子公司员工

总公司、子公司、子公司员工是三个类
总公司想要访问子公司的员工名单,不应该直接依赖员工的类,应该通过子公司来操作

错误示例

这里依赖了员工的类

void 打印所有员工名单() {
  for (员工:子公司.所有员工()) {
    print(员工.getName());
  }
}

建议示例

void 打印所有员工名单() {
  子公司.打印所有员工名单();
}
目录
相关文章
|
3月前
|
算法 Java 数据处理
依赖倒转原则是什么?
依赖倒转原则是什么?
|
测试技术
迪米特法则~
迪米特法则~
|
设计模式
设计模式——迪米特法则
设计模式——迪米特法则
|
设计模式
依赖倒置原则是干什么的?
依赖倒置原则是干什么的?
|
消息中间件 监控 NoSQL
接口隔离原则介绍
接口隔离原则介绍
265 0
|
XML JSON 数据格式
单一职责原则详解
单一职责原则详解
203 0
|
设计模式 Java
【Java设计模式】迪米特法则的详细介绍
【Java设计模式】迪米特法则的详细介绍