迪米特法则的定义

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

迪米特法则对类的低耦合提出了要求

1.只和朋友交流

什么是朋友呢?

出现在成员变量、方法的输入输出参数中的类称为朋友类,而出现在方法体内部的类不属于朋友类.

注意: 一个类只与朋友交流,不与陌生类交流,类与类之间的关系是建立在类间的,而不是方法间,因此一个方法尽量不引入一个类中不存在的对象,当然,JDK API提供的类除外

2.朋友间也是有距离的

一个类公开的public属性或方法越多,修改时设计的面也就越大,变更引起的风险扩散也就越大.因此,为了保持朋友类间的距离,在设计时需要反复衡量:是否还可以再减少public方法和属性,是否可以修改为private,protected等访问权限,是否可以加上final关键字等,迪米特法则要求类尽量不要对外公布太多的public方法和非静态的public变量.

3.是自己的就是自己的

在实际开发中经常会出现这样一个方法:放在本类中也可以,放在其他类中也没有错,那怎么去衡量呢?可以坚持这样一个原则: 如果一个方法放在本类中,既不增加类间关系,也对本类不产生负面影响,那就放置在本类中.


迪米特法则的核心观念就是类间解耦,弱耦合,只有弱耦合了以后,类的复用率才可以提高.其要求的结果就是产生了大量的中转或跳转类,导致系统的复杂性提高,同时也为维护带来了难度.在采用迪米特原则时需要反复权衡,既做到让结构清晰,有做到高内聚低耦合

6大设计原则之迪米特法则相关推荐

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

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

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

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

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

    以下七种设计原则是软件设计模式尽量遵循的原则,各种原则要求的侧重点不同. 开闭原则 是总纲,它告诉我们要对扩展开放,对修改关闭: 里氏替换原则 告诉我们不要破坏继承体系: 依赖倒置原则 告诉我们要面向 ...

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

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

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

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

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

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

  7. 设计模式 — 6大设计原则(依赖倒置和接口隔离原则)

    设计模式 依赖倒置原则 示例 一 示例 二 依赖的三种写法 总结 接口隔离原则 实例 一 总结 依赖倒置原则 依赖倒置原则(Dependence Inversion Principle,DIP)这个名 ...

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

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

  9. 面向对象设计原则_聊聊面向对象的6大设计原则

    程序员都知道编程有 3 大类:面向过程.面向对象.面向函数.面向对象是被讨论的最多的,个人认为,这是因为 Java 之类的编程语言有强大的用户基础,本质还是因为比较符合人的直觉. 说到面向对象,大家可 ...

最新文章

  1. 蓝牙 GATT 协议
  2. Chrome浏览器取代火狐的十大理由
  3. win10下安装linux mint,win10系统安装Mint Linux 18的详细步骤
  4. linux ps1 目录颜色,Linux下PS1终端下的颜色设置
  5. 回答面试官:我“腿特长”!阿里云小哥哥小姐姐咋看( 0 x 0 )?
  6. 一条看似平常的报警邮件所做的分析
  7. 万能门店小程序_关于传统门店开发微信小程序的优势
  8. JBoss BPM Travel Agency演示与现代BPM数据集成
  9. JPA教程:映射实体–第1部分
  10. [转]Error: SQL BPA command line has encountered a problem and needs to close
  11. python人门指南小说-致Python初学者 Anaconda入门使用指南完整版
  12. SpringCloud Eureka 高可用
  13. css实现背景全透明样式
  14. ckpt下载 deeplabv3_Ubantu下 用deeplabV3+训练自己的数据集 你可能遇到的所有坑都在这了...
  15. Figma插件开发-生成Gif
  16. Java:如何通过代码判断字符是拼音还是英文单词?
  17. python实现kmeans图像分割、一只遥望大海的小狗_【Python】爬虫+ K-means 聚类分析电影海报主色...
  18. 媒体查询之响应式布局
  19. 小觅摄像头 VINS-MONO安装
  20. python语义分割数据标签,将数字标签转彩色标签

热门文章

  1. sync.Map 源码学习
  2. java是值调用_Java 只有值调用
  3. python3 枚举_Python3枚举类如何处理重复名称?
  4. 2020江苏计算机二级考试官网,2020年秋季江苏省计算机等级考试报名通知
  5. sql移动加权计算利润_计算机视觉中的半监督学习
  6. 在每个运行中运行多个查询_Spring Data JPA的运行原理及几种查询方式
  7. a8处理器相当于骁龙几_天玑700处理器怎么样 天玑700相当于骁龙多少_CPU_硬件教程...
  8. 2020 idea 查看内存消耗_idea内存如何设置
  9. 学习Java的几大难题,你们都解决了吗?
  10. python 环境管理工具_再见 virtualenv!K神教你轻松管理多个Python环境