6大设计原则之迪米特法则
迪米特法则的定义
迪米特法则也称为最少知识原则,一个对象应该对其他对象有最少的了解. 通俗的讲,一个类应该对自己需要耦合或调用的类知道的最少,被调用类的内部是如何复杂都和我没关系,我就知道你的这些public方法,我就调用这么多,其他的我一概不关心.
迪米特法则对类的低耦合提出了要求
1.只和朋友交流
什么是朋友呢?
出现在成员变量、方法的输入输出参数中的类称为朋友类,而出现在方法体内部的类不属于朋友类.
注意: 一个类只与朋友交流,不与陌生类交流,类与类之间的关系是建立在类间的,而不是方法间,因此一个方法尽量不引入一个类中不存在的对象,当然,JDK API提供的类除外
2.朋友间也是有距离的
一个类公开的public属性或方法越多,修改时设计的面也就越大,变更引起的风险扩散也就越大.因此,为了保持朋友类间的距离,在设计时需要反复衡量:是否还可以再减少public方法和属性,是否可以修改为private,protected等访问权限,是否可以加上final关键字等,迪米特法则要求类尽量不要对外公布太多的public方法和非静态的public变量.
3.是自己的就是自己的
在实际开发中经常会出现这样一个方法:放在本类中也可以,放在其他类中也没有错,那怎么去衡量呢?可以坚持这样一个原则: 如果一个方法放在本类中,既不增加类间关系,也对本类不产生负面影响,那就放置在本类中.
迪米特法则的核心观念就是类间解耦,弱耦合,只有弱耦合了以后,类的复用率才可以提高.其要求的结果就是产生了大量的中转或跳转类,导致系统的复杂性提高,同时也为维护带来了难度.在采用迪米特原则时需要反复权衡,既做到让结构清晰,有做到高内聚低耦合
6大设计原则之迪米特法则相关推荐
- 六大设计原则之迪米特法则
定义:一个类和另一个类应该保持最小的了解 问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生变化时,对另一个类影响也越大. 解决方案:尽量降低类与类之间的耦合. //总公司员工 class E ...
- 【实验】软件设计原则,迪米特法则与开闭原则
(一)实验原理 1.迪米特法则:不要和"陌生人"说话.或只与你的直接朋友通信. 我们称出现成员变量.方法参数.方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友. ...
- 设计原则之六——迪米特法则
以下七种设计原则是软件设计模式尽量遵循的原则,各种原则要求的侧重点不同. 开闭原则 是总纲,它告诉我们要对扩展开放,对修改关闭: 里氏替换原则 告诉我们不要破坏继承体系: 依赖倒置原则 告诉我们要面向 ...
- 设计原则之迪米特法则详解
一.迪米特法则定义 一个对象应当对其它对象有尽可能少的了解,也被成为最少知道原则. 意思就是一个类中只与与它有直接关联的类联系,出现在这个类的成员变量.方法的输入,方法参数的类被成为朋友类,其他无直接 ...
- java设计模式(7):软件设计原则之迪米特法则
迪米特法则又叫最少知识原则. 只和你的直接朋友交谈,不跟"陌生人"说话(Talk only to your immediate friends and not to strange ...
- 设计原则之迪米特法则
迪米特法则(LOD): 要求一个对象应该对其他对象有最少的了解,所以迪米特法则又叫做最少知识原则. 意义: 迪米特法则的意义在于降低类之间的耦合.由于每个对象尽量减少对其他对象的了解,因此,很容易使得 ...
- 设计模式 — 6大设计原则(依赖倒置和接口隔离原则)
设计模式 依赖倒置原则 示例 一 示例 二 依赖的三种写法 总结 接口隔离原则 实例 一 总结 依赖倒置原则 依赖倒置原则(Dependence Inversion Principle,DIP)这个名 ...
- 设计原则 单一职责原则、开放封闭原则、依赖倒置原则、里氏代换原则、迪米特法则
目录 1 单一职责原则 2 开放封闭原则 3 依赖倒置原则 4 里氏代换原则 5 迪米特法则 1 单一职责原则 比如:电脑内存坏了就应该更换内存,不应该更换CPU (内存负责内存.CPU负责CPU) ...
- 面向对象设计原则_聊聊面向对象的6大设计原则
程序员都知道编程有 3 大类:面向过程.面向对象.面向函数.面向对象是被讨论的最多的,个人认为,这是因为 Java 之类的编程语言有强大的用户基础,本质还是因为比较符合人的直觉. 说到面向对象,大家可 ...
最新文章
- 蓝牙 GATT 协议
- Chrome浏览器取代火狐的十大理由
- win10下安装linux mint,win10系统安装Mint Linux 18的详细步骤
- linux ps1 目录颜色,Linux下PS1终端下的颜色设置
- 回答面试官:我“腿特长”!阿里云小哥哥小姐姐咋看( 0 x 0 )?
- 一条看似平常的报警邮件所做的分析
- 万能门店小程序_关于传统门店开发微信小程序的优势
- JBoss BPM Travel Agency演示与现代BPM数据集成
- JPA教程:映射实体–第1部分
- [转]Error: SQL BPA command line has encountered a problem and needs to close
- python人门指南小说-致Python初学者 Anaconda入门使用指南完整版
- SpringCloud Eureka 高可用
- css实现背景全透明样式
- ckpt下载 deeplabv3_Ubantu下 用deeplabV3+训练自己的数据集 你可能遇到的所有坑都在这了...
- Figma插件开发-生成Gif
- Java:如何通过代码判断字符是拼音还是英文单词?
- python实现kmeans图像分割、一只遥望大海的小狗_【Python】爬虫+ K-means 聚类分析电影海报主色...
- 媒体查询之响应式布局
- 小觅摄像头 VINS-MONO安装
- python语义分割数据标签,将数字标签转彩色标签
热门文章
- sync.Map 源码学习
- java是值调用_Java 只有值调用
- python3 枚举_Python3枚举类如何处理重复名称?
- 2020江苏计算机二级考试官网,2020年秋季江苏省计算机等级考试报名通知
- sql移动加权计算利润_计算机视觉中的半监督学习
- 在每个运行中运行多个查询_Spring Data JPA的运行原理及几种查询方式
- a8处理器相当于骁龙几_天玑700处理器怎么样 天玑700相当于骁龙多少_CPU_硬件教程...
- 2020 idea 查看内存消耗_idea内存如何设置
- 学习Java的几大难题,你们都解决了吗?
- python 环境管理工具_再见 virtualenv!K神教你轻松管理多个Python环境