定义:
(1)一个对象应该对其他对象保持最少的了解。又叫最少知道原则
(2)尽量降低类与类之间的耦合
(3)强调只和朋友交流,不和陌生人说话(意思就是对外部引入的类越少越好)。
朋友:指的是出现在成员变量,方法的输入,输出参数中的类称为成员朋友类,而出现在方法体内部的类则不属于朋友类。

优点:
降低类之间的耦合

如果过分的使用迪米特原则会产生大量的中介类,导致系统变复杂,为维护带来难度,所以我们在使用迪米特的时候应该反复权衡,既要结构清晰,又要做到低耦合,高内聚 。
比如在我们开发中遇到一个这样的情况,有这么一个方法,我们可以把它放到A类,也可以把它放到B类,那这种情况应该怎么做呢?
我们可以坚持一个原则:如果一个方法放到本类中,既不增加类间关系,也对本类不产生负面影响,我们就可以放到本类中。

以下通过案例进行理解迪米特原则:
那我们现在有这么一个场景:有一个课程网的大老板在这一天对一个Team说查一下到现在为止线上有多少个课程,那这里面呢关系到的类Boss,TeamLeader还有课程Course。

创建TeamLeader类,里面有个checkNumberOfCourses方法,参数是课程的集合,输出课程的数量

创建Boss类,有一个查课程数量的方法,参数是TeamLeader,意思是叫TeamLeader查一下课程的数量

然后写一个测试类Test

这样案例就演示完了,我们分析一下看有没有可以优化改进的地方。
我们看Boss中的方法

迪米特原则是只和直接的朋友交流,而在这个方法中,teamLeader作为入参,它是直接的朋友,朋友的定义就是直接出现在类成员变量里,而方法体内部的类不算朋友,例如Course这个类就不是Boss的朋友,Boss直接给TeamLeader下指令,TeamLeader直接把结果给Boss就可以了,Boss不需要关注Course这个类,不应该和Course交流,那目前的这种写法就违背了迪米特原则

类图如下:

如上图所示Course这个类应该是由TeamLeader创建的而不是由Boss创建,所以我们现在应该修改一下实现,修改Boss和TeamLeader类


修改之后可以清晰的看出Boss类给TeamLeader类下指令,TeamLeader类直接查,Boss不需要了解课程类,然后TeamLeader类去跟Course类发生接触。
类图如下:

Course是由TeamLeader生成的,不再与Boss发生接触,Boss也不需要知道Course。

对于迪米特原则,主要的是要可以分清楚那些是类的朋友,哪些不是。

java设计模式之设计原则⑤迪米特原则相关推荐

  1. Java设计模式之设计的6大原则(开闭原则,里氏代换原则,依赖倒转原则,接口隔离原则,最少知道原则,合成复用原则)

    1. 开闭原则 核心思想:一个对象对外扩展开发,对修改关闭 意思就是:对类的改动是通过增加代码进行的,而不是修改现有的代码. 也就是说软件开发人员一旦写出了可以运行的代码,就不应该去改动它,而是要保证 ...

  2. js的七大设计原则--迪米特原则

    一.什么是迪米特原则 迪米特原则也叫最少知道原则,一个类应该对其他对象保持最少的了解.通俗来讲,就是一个类对自己依赖的类知道的越少越好.因为类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另 ...

  3. Java设计模式-七大设计原则

    Java设计模式 设计模式七大原则 设计模式的目的 编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序(软件),具有更好 代码 ...

  4. Java设计模式六大设计原则

    从今年的七月份开始学习设计模式到9月底,设计模式全部学完了,在学习期间,总共过了两篇:第一篇看完设计模式后,感觉只是脑子里面有印象但无法言语.于是决定在看一篇,到9月份第二篇设计模式总于看完了,这一篇 ...

  5. java 设计模式之设计原则篇

    java 设计模式原则有:开闭原则. 里氏代换原则.依赖倒转原则.接口隔离原则.迪米法特原则.合成复用原则. 1. 开闭原则 对扩展开放.对修改关闭. 在程序需要进行拓展的时候,不能去修改原有的代码, ...

  6. java设计模式-六大设计原则

     1. .单一职责            一个类只负责一项职责.      2. 里氏替换原则     子类可以扩展父类的功能,但不能改变父类原有的功能.它包含以下4层含义:     子类可以实现父类 ...

  7. 从零开始学习Java设计模式 | 软件设计原则篇:开闭原则

    从本讲开始,咱们就要开始学习第一章中的第三部分内容,即软件设计原则了. 在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件 ...

  8. Java设计模式-软件设计原则

    目录 1 开闭原则 2 里氏代换原则 3 依赖倒转原则 4 接口隔离原则 5 迪米特法则 6 合成复用原则 在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量 ...

  9. 【设计模式】软件设计七大原则 ( 迪米特原则 | 代码示例 )

    文章目录 一.迪米特原则简介 二.迪米特原则代码示例 ( 反面示例 ) 1.经理类 2.员工类 3.商品类 4.测试类 三.迪米特原则代码示例 ( 推荐用法 ) 1.经理类 2.员工类 3.商品类 4 ...

最新文章

  1. 总结 20 个开发细节
  2. 支付宝发布黑科技“如影计划”,这真的不是愚人节的玩笑
  3. JAVA构造MAP并初始化MAP
  4. JAVA——自定义排序(实现Comparable接口)
  5. 探索Bioconductor数据包
  6. uni-app打包h5
  7. 蓝桥杯评测_前n项和
  8. 【转】SharePoint 2010 用户自定义编辑Meta标签的OOB方法
  9. mysql pow函数怎么用_pow函数怎么用
  10. Html5不可见标签,及标签属性(元素对象属性) a href target name id 相对路径
  11. python中使用pip安装报错:Fatal error in launcher... 解决方法
  12. 今晚直播丨易鲸捷HTAP融合型分布式数据库问题诊断介绍
  13. **带I2C的LCD1602液晶显示51单片机程序**
  14. vnc远程连接,5个步骤教你如何轻松实现vnc远程连接
  15. hp服务器怎么装win7系统,惠普280 Pro G4台式机intel 8代cpu安装win7步骤
  16. C语言经典题目:求阶乘n!=n*(n-1)*...*1,阶乘和s=1!+(2)!+(3)!+...+n!
  17. 如何用PS做出火焰文字的效果?
  18. easyExcel导出数据并设置单元格下拉数据
  19. xv6的sleep和wakeup
  20. 落地SQL审核的迭代思路

热门文章

  1. GBDT 入门教程之原理、所解决的问题、应用场景讲解
  2. Python汉诺塔问题
  3. vuex 基本入门和使用(一)
  4. jQuery获取所有父级元素及同级元素及子元素的方法
  5. WINDOWS XP SP2 NTFS EFS加密文件的解密案例
  6. Thinkphp3.2.3打印上一句执行的sql语句
  7. Metronic学习之路
  8. shell脚本把昨天的txt打成tar包
  9. SQL Server2005 ROW_NUMBER() OVER 使用
  10. HTML5-基础语法