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

迪米特法则能够简单说成:talk only to your immediate friends。 对于面向OOD来说,又被解释为以下几种方式:一个软件实体应当尽可能少的与其它实体发生相互作用。每个软件单位对其它的单位都仅仅有最少的知识,并且局限于那些与本单位密切相关的软件单位。
迪米特法则的初衷在于降低类之间的耦合。因为每一个类尽量降低对其它类的依赖,因此,非常easy使得系统的功能模块功能独立,相互之间不存在(或非常少有)依赖关系。
迪米特法则不希望类直接建立直接的接触。

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

有兴趣能够研究一下设计模式的门面模式(Facade)和中介模式(Mediator)。都是迪米特法则应用的样例。
值得一提的是,尽管Ian Holland对计算机科学的贡献也仅限于这一条法则。其它方面的建树不多,可是,这一法则却不只局限于计算机领域,在其它领域也相同适用。

比方。美国人就在航天系统的设计中採用这一法则。

狭义的迪米特法则
假设两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。

假设当中的一个类须要调用还有一个类的某一个方法的话,能够通过第三者转发这个调用。

朋友圈的确定
“朋友”条件:
1)当前对象本身(this)
2)以參量形式传入到当前对象方法中的对象
3)当前对象的实例变量直接引用的对象
4)当前对象的实例变量假设是一个聚集,那么聚集中的元素也都是朋友
5)当前对象所创建的对象
不论什么一个对象,假设满足上面的条件之中的一个。就是当前对象的“朋友”;否则就是“陌生人”。
狭义的迪米特法则的缺点:
在系统里造出大量的小方法。这些方法不过传递间接的调用,与系统的商务逻辑无关。
遵循类之间的迪米特法则会是一个系统的局部设计简化。由于每个局部都不会和远距离的对象有直接的关联。可是,这也会造成系统的不同模块之间的通信效率减少,也会使系统的不同模块之间不easy协调。
门面模式和调停者模式实际上就是迪米特法则的应用。
广义的迪米特法则在类的设计上的体现:
优先考虑将一个类设置成不变类。
尽量减少一个类的訪问权限。
慎重使用Serializable。
尽量减少进入会员。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

设计模式6大原则(5)-得墨忒耳相关推荐

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

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

  2. 设计模式6大原则-开闭原则

    设计模式6大原则-开闭原则 定义:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 开闭原则理念就是当需求改变时,希望在不改变原有代码的前提下,通过扩展模块.函数来满足新需求. 开闭原则是其他 ...

  3. C#版得墨忒耳定律(迪米特法则)

    最近在度娘搜代码优化,看到了Edison Zhou写的<代码整洁之道>(Clean Code)- 读书笔记,里面有个整理很清楚的思维导图,发现有得墨忒耳定律,就想到面试题里的简单经典的问题 ...

  4. 使用函数的得墨忒耳法则来解耦

    编写"羞怯"的代码: 包含两层意思,一个是不向别人暴露你自己,不会没必要的向其他模块暴露任何事情:另一个是不与太多人打交道,不依赖于其他模块实现的模块. 不与太多人打交道,说的就是 ...

  5. 函数的得墨忒耳法则(转)

    函数的得墨忒耳法则 分类: 设计模式与重构 2011-03-21 20:08 58人阅读 评论(0) 收藏 举报 得墨忒耳定律也叫做"最少了解原理",是一种软件设计原理,尤其是应用 ...

  6. 得墨忒耳定律(Law of Demeter)

    得墨忒耳定律(Law of Demeter,缩写LoD)也叫做"最少知识原则",是一种开发软件的设计原理,特别是面向对象的程序设计,得墨忒耳定律是松耦合的一种特殊情况.该指导原则是 ...

  7. 得墨忒耳法则(迪米特法则)

    使用函数的得墨忒耳法则来解耦 编写"羞怯"的代码: 包含两层意思,一个是不向别人暴露你自己,不会没必要的向其他模块暴露任何事情:另一个是不与太多人打交道,不依赖于其他模块实现的模块 ...

  8. 得墨忒耳定律 (Law of Demeter,缩写LoD)

    前言 这篇文章中,我想谈一谈得墨忒耳定律(Law of Demeter,缩写LoD).我觉得这个主题对于写出一手简洁.精心设计和易于维护的代码,是极其重要的. 根据我的经验,看到这条规则被打破,往往意 ...

  9. 设计模式“6”大原则!

    面向对象设计原则 概述 对于面向对象软件系统的设计而言,在支持可维护性的同时,提高系统的可复用性是一个至关重要的问题,如何同时提高一个软件系统的可维护性和可复用性是面向对象设计需要解决的核心问题之一. ...

最新文章

  1. 武林外传辅助工具详细制作过程[第二篇:查看数据]
  2. python爬虫中三种数据解析方式
  3. 如何用SPSS做协方差分析?超详细图文教程
  4. php html xml,xml和html之间的区别有哪些
  5. pytorch机器学习_机器学习— PyTorch
  6. 华为否认启动“塔山计划”;中金:苹果中国区下架微信概率较小;Linux Lab发布v0.5 rc3| 极客头条...
  7. Struts框架的核心业务
  8. Java中递归复制多级文件夹(IO流)
  9. python使用opencv图像聚类_Python3 OpenCV3图像处理-K-means 聚类
  10. 10:Java人脸识别认证-Java API 实战
  11. 月薪11970元的网络运维工程师需要掌握哪些必备技能?
  12. 计算机系统原理实验:模型机(十)ttime部分
  13. win32 打印机任务管理的 node 模块 (3)详解Win32 Spooler API 获取打印机列表及状态
  14. 数据标注工具下载中遇到的各种问题
  15. pbl和sbl_ROKSO、SBL、XBL、PBL、DBL 是什么意思?
  16. 表格怎么样输入数字自己计算机,表格中输入数字第一个数字是0怎么办
  17. 在Qt-Creator中使用搜狗输入中文的最简单解决方法(不需要编译安装)
  18. CPU当中的分支预测
  19. 廖雪峰老师个人网站推荐
  20. jetracer——自动驾驶车项目(basic_motion.ipynb)

热门文章

  1. 九龙证券|三胎概念股拉升…港股跳水,恒生科指重挫近5%
  2. 用滚动数组求解0/1背包问题
  3. 证券公司信息化6-交易和结算的区隔?什么是一级清算?二级、三级清算呢?涉及哪些IT应用系统?
  4. 已知序列求蝶形运算_数字信号处理习题集
  5. html如何制作小圆点,纯CSS实现小圆点和三角形图案
  6. 有条码技术仓库不再难管理
  7. android note分析,随记你的掌上灵感 三星S Note功能解析
  8. android开发学习大体思路
  9. 微信小程序皮肤检测动态滑动展示效果
  10. 自然语言处理(2):Jieba分词