设计原则之六——迪米特法则
以下七种设计原则是软件设计模式尽量遵循的原则,各种原则要求的侧重点不同。
开闭原则 是总纲,它告诉我们要对扩展开放,对修改关闭;
里氏替换原则 告诉我们不要破坏继承体系;
依赖倒置原则 告诉我们要面向接口编程;
单一职责原则 告诉我们实现类要职责单一;
接口隔离原则 告诉我们在设计接口的时候要精简单一;
迪米特法则 告诉我们要降低耦合度;
合成复用原则 告诉我们要优先使用组合或者聚合关系复用,少用继承关系复用。
迪米特法则(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)功能
设计原则之六——迪米特法则相关推荐
- 6大设计原则之迪米特法则
迪米特法则的定义 迪米特法则也称为最少知识原则,一个对象应该对其他对象有最少的了解. 通俗的讲,一个类应该对自己需要耦合或调用的类知道的最少,被调用类的内部是如何复杂都和我没关系,我就知道你的这些pu ...
- 【实验】软件设计原则,迪米特法则与开闭原则
(一)实验原理 1.迪米特法则:不要和"陌生人"说话.或只与你的直接朋友通信. 我们称出现成员变量.方法参数.方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友. ...
- 六大设计原则之迪米特法则
定义:一个类和另一个类应该保持最小的了解 问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生变化时,对另一个类影响也越大. 解决方案:尽量降低类与类之间的耦合. //总公司员工 class E ...
- 设计原则之迪米特法则详解
一.迪米特法则定义 一个对象应当对其它对象有尽可能少的了解,也被成为最少知道原则. 意思就是一个类中只与与它有直接关联的类联系,出现在这个类的成员变量.方法的输入,方法参数的类被成为朋友类,其他无直接 ...
- java设计模式(7):软件设计原则之迪米特法则
迪米特法则又叫最少知识原则. 只和你的直接朋友交谈,不跟"陌生人"说话(Talk only to your immediate friends and not to strange ...
- 设计原则之迪米特法则
迪米特法则(LOD): 要求一个对象应该对其他对象有最少的了解,所以迪米特法则又叫做最少知识原则. 意义: 迪米特法则的意义在于降低类之间的耦合.由于每个对象尽量减少对其他对象的了解,因此,很容易使得 ...
- 设计原则 单一职责原则、开放封闭原则、依赖倒置原则、里氏代换原则、迪米特法则
目录 1 单一职责原则 2 开放封闭原则 3 依赖倒置原则 4 里氏代换原则 5 迪米特法则 1 单一职责原则 比如:电脑内存坏了就应该更换内存,不应该更换CPU (内存负责内存.CPU负责CPU) ...
- 设计模式原则之迪米特法则
设计模式原则之迪米特法则 迪米特法则(Law of Demeter, LoD)的核心是一个软件实体应当尽可能少地与其他实体发生相互作用. 如果一个系统符合迪米特法则,那么当其中某一个模块发生修改时,就 ...
- 面象对象设计原则之六:迪米特原则(LeastKnowledge Principle, LKP)
迪米特法则来自于1987年美国东北大学(Northeastern University)一个名为"Demeter"的研究项目.迪米特法则又称为最少知识原则(LeastKnowled ...
最新文章
- 这一篇让你真正理解Mysql的四种隔离级别
- 05-常用IOC注解按照作用分类
- SpringMVC的请求-获得请求参数-获得请求头信息
- 监听一个可下拉区域的滚动监听_Flutter 实现一个悬浮的效果
- 邮箱不可用 550 User has no permission
- php实现从本网站每天出站连接向目标网站贡献的IP和PV的统计
- Beta版本展示博客
- java php 采集数据,php和java进行交互数据
- 贪心算法实例java,算法java实现--贪心算法--哈弗曼编码
- 大数据开发入门怎么学习?
- Swift 开源项目汇总
- MDui库又一次更新了,重构了绘制的相关逻辑
- html input粘贴功能,原生js实现复制粘贴功能
- KY RD9700_USB网卡驱动
- 大淘客cms源码修改二次开发
- ble HCI 流控机制
- hp服务器改系统启动项,hp笔记本如何进入bios修改启动项
- 什么是抓包?为什么要抓包?
- Power BI(十二)Power Pivot时间智能函数
- Ubuntu 18.04 chia 远程收割机 harvester 多台
热门文章
- Bernstein-Vazirani algorithm(BV算法)
- linux下的各种复制粘贴
- MySQL增删改查的常用语句汇总
- mysql正则表达式讲解_MySQL 正则表达式详解
- 产业区块链一周动态丨信用债市场血雨腥风,区块链能够有哪些作为?
- Element ‘web-app’ cannot have character [children], because the type’s content type is element-onl
- 再谈Linux磁盘扩容(pvresize直接扩容PV)
- 两种实现php无限极分类
- 关于支付宝--我的攒钱计划--利率计算说明
- Python获取文件创建时间