10.3.5  迪米特法则(最少知道原则)(Demeter Principle)

迪米特法则(Law of Demeter)又叫最少知道原则(Least Knowledge Principle),1987年秋天由美国Northeastern University的Ian Holland提出,被UML的创始者之一Booch等普及。后来,因为在经典著作《 The Pragmatic Programmer》中提出而广为人知。

迪米特法则可以简单说成:talk only to your immediate friends。 对于面向OOD来说,又被解释为下面几种方式:

一个软件实体应当尽可能少地与其他实体发生相互作用。

每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。

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

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

例如,购房者要购买楼盘A、B、C中的楼,他不必直接到楼盘去买楼,而是可以通过一个售楼处去了解情况,这样就减少了购房者与楼盘之间的耦合,如图10-6所示。

 

后文中的外观模式(Facade)和中介者模式(Mediator),都是如上这种迪米特法则应用的例子。

迪米特法则(最少知道原则)相关推荐

  1. 【设计模式】迪米特法则和六种原则的总结

    迪米特法则 一个对象应该对其他对象保持最少的了解 类与类关系越密切,耦合度越大 迪米特法则又叫最少知道原则,即一个类对自己依赖的类知道的越少越好.也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装 ...

  2. 迪米特法则——面向对象设计原则

    迪米特法则的定义迪米特法则(Law of Demeter,LoD)又叫作最少知识原则(Least Knowledge Principle,LKP),产生于 1987 年美国东北大学(Northeast ...

  3. 深入浅出设计模式原则之迪米特法则(LoD)

    下面以"明星与经纪人的关系实例"为例来说明迪米特法则原则的应用(工程源码) 分析:明星由于全身心投入艺术,所以许多日常事务由经纪人负责处理,如与粉丝的见面会,与媒体公司的业务洽淡等 ...

  4. 围观设计模式(5)--迪米特法则(Lod,Law of Demeter)或最少知道原则(Least Knowledge Principle)

    得墨忒耳(迪米特)定律(Law of Demeter,缩写LoD)亦称为"最少知识原则(Principle of Least Knowledge)",是一种软件开发的设计指导原则, ...

  5. 迪米特法则(最少知识原则)

    定义 如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用.如果一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个应用. 迪米特法则强调:在类的结构设计上,每一个类都应该尽量 ...

  6. 迪米特法则原理(最少知道原则)

    定义:是指一个对象类对于其他对象类来说,知道的越少越好.也就是说两个类之间不要有过多的耦合关系,保持最少关联性. 经典语录:只和朋友通信,不合陌生人说话. 也就是说有内在关联的类要内聚,没有直接关系的 ...

  7. 【设计模式】七大设计原则--------迪米特法则(得墨忒耳定律)(最少知识定律)

    文章目录 1.介绍 2.示例 3.改进 1.介绍 得墨忒耳,是希腊神话的农业女神. 得墨忒耳定律主要内容为: (1)每个单元对于其他的单元只能拥有有限的知识:只是与当前单元紧密联系的单元: (2)每个 ...

  8. 设计模式六大原则(5):迪米特法则

    定义:一个对象应该对其他对象保持最少的了解. 问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大. 解决方案:尽量降低类与类之间的耦合. 自从我们接触编程开始,就 ...

  9. 设计模式:设计模式七大原则之迪米特法则

    迪米特法则的核心是降低类之间的耦合 , 最少知道原则 import java.util.ArrayList; import java.util.List;public class Demeter1 { ...

最新文章

  1. java自动化开发_Java自动化开发指南
  2. 【CV】图像分割二十年,盘点影响力最大的10篇论文
  3. 在VS2010 中使用subversion 进行代码的分支与合并
  4. 计算机网络划分的标准,计算机网络基础
  5. oracle关于时区,关于oracle时区
  6. 为什么不邀请我参加会议?
  7. python一张图学懂_【python系统学习07】一张图看懂字典并学会操作
  8. mybatis 动态SQL-where标签
  9. Salesforce Ventures为云初创公司Vlocity注资5000万美元
  10. pytest框架+conftest.py配置公共数据的准备和清理
  11. 常用单词3000 php,常用英语单词大全,英语最常用单词3000个。
  12. 对于最小二乘法的解释
  13. 什么是集线器、交换机、路由器、光猫?它们之间的本质区别是什么?
  14. SpringBoot整合Log4j2以及配置详解
  15. Zbar的安装及环境配置(环境:VS2022、64位Win10、OpenCV3.6.0)
  16. android ViewFlipper屏幕切换
  17. 又一巨头从Java迁移到Kotlin:关键应用全部开始切换、安卓代码库超过千万行Kotlin代码
  18. Linux常用指令(ubuntu)
  19. 西游记中孙悟空为什么打不过有法宝的妖怪?
  20. 读冯唐先生的《不二》

热门文章

  1. MapStruct、ignore
  2. 香港的区块链棋局, 十年后, 纽伦港还能主导金融世界吗?
  3. 无能狂怒之@RequestParam、@PathParam、@PathVariable三者有什么区别我都不知道!
  4. 题目26 黑板报上色
  5. 傅里叶变换 ~ 四种可能形式
  6. Linux如何挂载windows共享文件夹(包含Linux报错解决)
  7. (十四)懈寄生(3)
  8. webug 4.0 第二关 布尔注入
  9. 拉线位移编码器零线有电的原因
  10. 2g内存装什么系统好电脑2g内存适合装什么系统