以下七种设计原则是软件设计模式尽量遵循的原则,各种原则要求的侧重点不同。

开闭原则 是总纲,它告诉我们要对扩展开放,对修改关闭;
里氏替换原则 告诉我们不要破坏继承体系;
依赖倒置原则 告诉我们要面向接口编程;
单一职责原则 告诉我们实现类要职责单一;
接口隔离原则 告诉我们在设计接口的时候要精简单一;
迪米特法则 告诉我们要降低耦合度;
合成复用原则 告诉我们要优先使用组合或者聚合关系复用,少用继承关系复用。


迪米特法则(Law of Demeter,LoD)

一个对象应该对其他对象保持尽可能少的了解。
又叫做 最少知识原则(Least Knowledge Principle,LKP)
The dependency of one class to another one should depend on the smallest possible interface.


  • 只与你的直接朋友交谈,不跟“陌生人”说话。
  • 如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发调用。
  • 其目的是降低类之间的耦合度,提高模块的相对独立性。

迪米特法则中的 “朋友” 是指:

  • 当前对象本身
  • 当前对象的成员对象
  • 当前对象所创建的对象
  • 当前对象的方法参数

这些对象同当前对象存在关联、聚合或组合关系,可以直接访问这些对象的方法。


迪米特法则的优点

迪米特法则要求限制软件实体之间通信的宽度和深度,正确使用迪米特法则将有以下两个优点。
① 降低了类之间的耦合度,提高了模块的相对独立性。
② 由于亲和度降低,从而提高了类的可复用性和系统的扩展性。
但是,过度使用迪米特法则会使系统产生大量的中介类,从而增加系统的复杂性,使模块之间的通信效率降低。
所以,在使用迪米特法则时,需要反复权衡,确保高内聚和低耦合的同时,保证系统的结构清晰。


场景举例·壹 明星与经纪人

分析:明星由于全身心投入艺术,所以许多日常事务由经纪人负责处理,如与粉丝的见面会,与媒体公司的业务洽淡等。这里的经纪人是明星的朋友,而粉丝和媒体公司是陌生人,所以适合使用迪米特法则。
其类图如下:


场景举例·贰 老子使民无知

《老子》第三章曰:“是以圣人之治,虚其心,实其腹,弱其志,常使民无知无欲。”
使被统治的对象愚昧化,处于无知的状态,可以使统治的成本降低。
所谓“最少知识”原则,实际上便是老子的“使民无知”的统治之术。

一个软件系统可以看成是一个虚拟的世界,设计师本人就是驾驭这个世界的统治者。


场景举例·叁 老子不相往来

《老子》云:“小国寡民……邻国相望,鸡犬之声相闻,民至老死而不相往来。”
这里讲的是降低统治成本的方法。将被统治的对象隔离开来,使他们没有直接的通信,可以达到分化瓦解,继而分而治之的效果。
所谓迪米特法则,便是设法是一个软件系统的不同对象彼此之间尽量“不相往来”,降低系统维护成本的法则。


迪米特法则的实现方法

从迪米特法则的定义和特点可知,它强调以下两点:
① 从依赖着的角度来说,只依赖应该依赖的对象;
② 从被依赖者的角度说,只暴露应该暴露的方法。

所以,在运用迪米特法则时要注意以下6点:
① 在类的划分上,应该创建弱耦合的类。类与类之间的耦合越弱,就越有利于实现可复用的目标;
② 在类的结构设计上,尽量降低类成员的访问权限;
③ 在类的设计上,优先考虑将一个类设置成不变类。
④ 在对其他类的引用上,将引用其他对象的次数降到最低。
⑤ 不暴露类的属性成员,而应该提供相应的访问器(set和get方法)
⑥ 谨慎使用序列化(Serializable)功能


设计原则之六——迪米特法则相关推荐

  1. 6大设计原则之迪米特法则

    迪米特法则的定义 迪米特法则也称为最少知识原则,一个对象应该对其他对象有最少的了解. 通俗的讲,一个类应该对自己需要耦合或调用的类知道的最少,被调用类的内部是如何复杂都和我没关系,我就知道你的这些pu ...

  2. 【实验】软件设计原则,迪米特法则与开闭原则

    (一)实验原理 1.迪米特法则:不要和"陌生人"说话.或只与你的直接朋友通信. 我们称出现成员变量.方法参数.方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友. ...

  3. 六大设计原则之迪米特法则

    定义:一个类和另一个类应该保持最小的了解 问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生变化时,对另一个类影响也越大. 解决方案:尽量降低类与类之间的耦合. //总公司员工 class E ...

  4. 设计原则之迪米特法则详解

    一.迪米特法则定义 一个对象应当对其它对象有尽可能少的了解,也被成为最少知道原则. 意思就是一个类中只与与它有直接关联的类联系,出现在这个类的成员变量.方法的输入,方法参数的类被成为朋友类,其他无直接 ...

  5. java设计模式(7):软件设计原则之迪米特法则

    迪米特法则又叫最少知识原则. 只和你的直接朋友交谈,不跟"陌生人"说话(Talk only to your immediate friends and not to strange ...

  6. 设计原则之迪米特法则

    迪米特法则(LOD): 要求一个对象应该对其他对象有最少的了解,所以迪米特法则又叫做最少知识原则. 意义: 迪米特法则的意义在于降低类之间的耦合.由于每个对象尽量减少对其他对象的了解,因此,很容易使得 ...

  7. 设计原则 单一职责原则、开放封闭原则、依赖倒置原则、里氏代换原则、迪米特法则

    目录 1 单一职责原则 2 开放封闭原则 3 依赖倒置原则 4 里氏代换原则 5 迪米特法则 1 单一职责原则 比如:电脑内存坏了就应该更换内存,不应该更换CPU (内存负责内存.CPU负责CPU) ...

  8. 设计模式原则之迪米特法则

    设计模式原则之迪米特法则 迪米特法则(Law of Demeter, LoD)的核心是一个软件实体应当尽可能少地与其他实体发生相互作用. 如果一个系统符合迪米特法则,那么当其中某一个模块发生修改时,就 ...

  9. 面象对象设计原则之六:迪米特原则(LeastKnowledge Principle, LKP)

    迪米特法则来自于1987年美国东北大学(Northeastern University)一个名为"Demeter"的研究项目.迪米特法则又称为最少知识原则(LeastKnowled ...

最新文章

  1. 这一篇让你真正理解Mysql的四种隔离级别
  2. 05-常用IOC注解按照作用分类
  3. SpringMVC的请求-获得请求参数-获得请求头信息
  4. 监听一个可下拉区域的滚动监听_Flutter 实现一个悬浮的效果
  5. 邮箱不可用 550 User has no permission
  6. php实现从本网站每天出站连接向目标网站贡献的IP和PV的统计
  7. Beta版本展示博客
  8. java php 采集数据,php和java进行交互数据
  9. 贪心算法实例java,算法java实现--贪心算法--哈弗曼编码
  10. 大数据开发入门怎么学习?
  11. Swift 开源项目汇总
  12. MDui库又一次更新了,重构了绘制的相关逻辑
  13. html input粘贴功能,原生js实现复制粘贴功能
  14. KY RD9700_USB网卡驱动
  15. 大淘客cms源码修改二次开发
  16. ble HCI 流控机制
  17. hp服务器改系统启动项,hp笔记本如何进入bios修改启动项
  18. 什么是抓包?为什么要抓包?
  19. Power BI(十二)Power Pivot时间智能函数
  20. Ubuntu 18.04 chia 远程收割机 harvester 多台

热门文章

  1. Bernstein-Vazirani algorithm(BV算法)
  2. linux下的各种复制粘贴
  3. MySQL增删改查的常用语句汇总
  4. mysql正则表达式讲解_MySQL 正则表达式详解
  5. 产业区块链一周动态丨信用债市场血雨腥风,区块链能够有哪些作为?
  6. Element ‘web-app’ cannot have character [children], because the type’s content type is element-onl
  7. 再谈Linux磁盘扩容(pvresize直接扩容PV)
  8. 两种实现php无限极分类
  9. 关于支付宝--我的攒钱计划--利率计算说明
  10. Python获取文件创建时间