java设计模式之设计原则⑤迪米特原则
定义:
(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设计模式之设计原则⑤迪米特原则相关推荐
- Java设计模式之设计的6大原则(开闭原则,里氏代换原则,依赖倒转原则,接口隔离原则,最少知道原则,合成复用原则)
1. 开闭原则 核心思想:一个对象对外扩展开发,对修改关闭 意思就是:对类的改动是通过增加代码进行的,而不是修改现有的代码. 也就是说软件开发人员一旦写出了可以运行的代码,就不应该去改动它,而是要保证 ...
- js的七大设计原则--迪米特原则
一.什么是迪米特原则 迪米特原则也叫最少知道原则,一个类应该对其他对象保持最少的了解.通俗来讲,就是一个类对自己依赖的类知道的越少越好.因为类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另 ...
- Java设计模式-七大设计原则
Java设计模式 设计模式七大原则 设计模式的目的 编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序(软件),具有更好 代码 ...
- Java设计模式六大设计原则
从今年的七月份开始学习设计模式到9月底,设计模式全部学完了,在学习期间,总共过了两篇:第一篇看完设计模式后,感觉只是脑子里面有印象但无法言语.于是决定在看一篇,到9月份第二篇设计模式总于看完了,这一篇 ...
- java 设计模式之设计原则篇
java 设计模式原则有:开闭原则. 里氏代换原则.依赖倒转原则.接口隔离原则.迪米法特原则.合成复用原则. 1. 开闭原则 对扩展开放.对修改关闭. 在程序需要进行拓展的时候,不能去修改原有的代码, ...
- java设计模式-六大设计原则
1. .单一职责 一个类只负责一项职责. 2. 里氏替换原则 子类可以扩展父类的功能,但不能改变父类原有的功能.它包含以下4层含义: 子类可以实现父类 ...
- 从零开始学习Java设计模式 | 软件设计原则篇:开闭原则
从本讲开始,咱们就要开始学习第一章中的第三部分内容,即软件设计原则了. 在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件 ...
- Java设计模式-软件设计原则
目录 1 开闭原则 2 里氏代换原则 3 依赖倒转原则 4 接口隔离原则 5 迪米特法则 6 合成复用原则 在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量 ...
- 【设计模式】软件设计七大原则 ( 迪米特原则 | 代码示例 )
文章目录 一.迪米特原则简介 二.迪米特原则代码示例 ( 反面示例 ) 1.经理类 2.员工类 3.商品类 4.测试类 三.迪米特原则代码示例 ( 推荐用法 ) 1.经理类 2.员工类 3.商品类 4 ...
最新文章
- 总结 20 个开发细节
- 支付宝发布黑科技“如影计划”,这真的不是愚人节的玩笑
- JAVA构造MAP并初始化MAP
- JAVA——自定义排序(实现Comparable接口)
- 探索Bioconductor数据包
- uni-app打包h5
- 蓝桥杯评测_前n项和
- 【转】SharePoint 2010 用户自定义编辑Meta标签的OOB方法
- mysql pow函数怎么用_pow函数怎么用
- Html5不可见标签,及标签属性(元素对象属性) a href target name id 相对路径
- python中使用pip安装报错:Fatal error in launcher... 解决方法
- 今晚直播丨易鲸捷HTAP融合型分布式数据库问题诊断介绍
- **带I2C的LCD1602液晶显示51单片机程序**
- vnc远程连接,5个步骤教你如何轻松实现vnc远程连接
- hp服务器怎么装win7系统,惠普280 Pro G4台式机intel 8代cpu安装win7步骤
- C语言经典题目:求阶乘n!=n*(n-1)*...*1,阶乘和s=1!+(2)!+(3)!+...+n!
- 如何用PS做出火焰文字的效果?
- easyExcel导出数据并设置单元格下拉数据
- xv6的sleep和wakeup
- 落地SQL审核的迭代思路