设计原则(5):迪米特原则
迪米特原则这么说:一个对象应该对其他对象有最少的了解。通俗地讲,一个类应该对自己需要耦 合或调用的类知道得最少,你(被耦合或调用的类)的内部是如何复杂都和我没关系,那是你的事情,我就知 道你提供的这么多public方法,我就调用这么多,其他的我一概不关心。
举个例子:体育老师要求体育委员统计班级的学生总数:
这个例子有一个设计的问题,Teacher类既依赖的Girl类也依赖了GropuLeader类,这与我们的需求是不一致的,理论上Teacher类只需要依赖GropuLeader,然后GropuLeader类依赖Girl类。一似乎我么对其类图进行修改:
这样设计好了以后,就符合迪米特原则了,下面再来一个例子:模拟软件安装的过程:类图如下:
这样设计有一个不合适的点就是,Wizard类把太多的方法暴露给 InstallSoftware类,两者的朋友关系太亲密了,耦合关系变得异常牢固。如果要将Wizard类中的first方法返回值 的类型由int改为boolean,就需要修改InstallSoftware类,从而把修改变更的风险扩散开了。因此,这样的耦合是 极度不合适的,我们需要对设计进行重构,重构后的类图如图5-4所示。
一个类公开的public属性或方法越多,修改时涉及的面也就越大,变更引起的风险扩散也就越大。因此, 为了保持朋友类间的距离,在设计时需要反复衡量:是否还可以再减少public方法和属性,是否可以修改为 private、package-private(包类型,在类、方法、变量前不加访问权限,则默认为包类型)、protected等访问权 限,是否可以加上final关键字等。迪米特法则要求类“羞涩”一点,尽量不要对外公布太多的public方法和非静态的public变量,尽量 内敛,多使用private、package-private、protected等访问权限。
设计原则(5):迪米特原则相关推荐
- 设计原则之迪米特原则
迪米特原则 Law of Demeter, LOD 迪米特原则定义 迪米特原则也叫最小知识原则(The Least Knowledge Principle).即,每个模块只应该了解那些与它关系密切的模 ...
- 软件设计原则之接口隔离原则、合成复用原则、迪米特原则
系列文章目录 软件设计原则之单一职责原则.开闭原则 软件设计原则之里氏替换原则.依赖倒置原则 软件设计原则之接口隔离原则.合成复用原则.迪米特原则 文章目录 系列文章目录 一.接口隔离原则 什么是接口 ...
- 【学习笔记】慕课网—Java设计模式精讲 第3章 软件设计七大原则-3-6 迪米特原则(最少知道原则)...
/** * 软件设计七大原则-迪米特原则 学习笔记 * @author cnRicky * @date 2018.11.10 */ 迪米特原则(最少知道原则) 一个对象应该对其他对象保持最少的了解.又 ...
- C# 设计原则 之 迪米特 原则
迪米特法则又叫作最少知道原则,一般设计用于 对类内部 进行 合适的封装. 下面举例: 人关闭电脑的 示例 1.1没有实现 迪米特原则的 代码 namespace 迪米特 {internal class ...
- 六大设计原则之迪米特原则
迪米特原则的定义 迪米特原则(Law of Demeter,LoD),也叫最少知识原则(Low knowledge Principle,LKP): 一个对象应该对其他对象有最少的了解. 通俗的讲:一个 ...
- 设计模式-设计原则之迪米特原则
例子 假设老板给项目组长下达一个任务,让其去查询课程的数量 代码 public class Course {} public class TeamLeader {public void checkNu ...
- 设计模式:六大原则之迪米特原则
迪米特原则 基本介绍 定义:迪米特法则也称为最少知识原则,即一个对象应该对其他对象有最少的了解.通俗地说,一个类应该对自己需要耦合或调用的类知道的最少,被调用或耦合的类的内部是如何复杂都和我没有关系. ...
- 程序设计原则之迪米特原则
一.什么是迪米特原则 迪米特原则也叫最小知道原则,即对其他的类尽量保持最少知道.只关心自己的直接朋友类,而不关心其他的类. 直接朋友类:出现在自己的域中.方法入参中.方法出参中的类叫直接朋友类:那些在 ...
- 面向对象的六大原则之 —— 迪米特原则
学习了何红辉.关爱民写的<Android设计模式>,对于面向对象的六大原则有进一步的理解,特此根据自己的理解记录总结一下 什么是迪米特原则 也称为最少知识原则,意思就是一个对象应该对其他对 ...
- 设计模式(6)之七大原则之迪米特原则
一.定义 迪米特法则(Law of Demeter,LoD)又叫作最少知识原则(Least Knowledge Principle,LKP),产生于 1987 年美国东北大学(Northeastern ...
最新文章
- 【ACM】杭电OJ 2034
- 华为算力最强AI芯片商用:2倍于英伟达V100!开源AI框架,对标TensorFlow和PyTorch...
- oracle10g重新配置crs,Oracle 10G RAC一节点系统重做后修复
- vs显式导入(代码注入)依赖库
- 深度学习核心技术精讲100篇(四十四)-深度召回在招聘推荐中的挑战和实践
- MySQL局域网内访问慢的原因及解决方法
- 基于蒙特卡罗模拟的金融风险评估-函数调用关系图
- Centos 5.2安装Cacti并集成Nagios安装文档
- php if多条件_通过PHP与Python代码对比浅析语法差异
- masm32 安装过程(记录)
- 电力拖动自动控制系统(序)
- android 自定义locale,关于android:设置Locale.setDefault(locale)后,如何获取手机语言?...
- html方框打勾字段,word文档怎么输入带方框的对勾
- swoole开发多人在线游戏新手教程
- jmu-python-生日悖论(熟练掌握随机数的生成以及检查重复)
- 使用正则批量修改文件名
- cpolra实现内网穿透,无须公网ip
- MT6765中断处理IO口配置流程
- 上海东原从“野心家”到“大玩家” 连接江湖“人情味”
- openlayers3.20.1发布说明
热门文章
- Java将网络图片下载至文件夹,然后将文件夹压缩成zip
- H3C核心交换机获取所有IP地址和MAC地址
- 首届可视化网络安全技术论坛开讲,大腕云集干货足
- 【转】在Excel中如何输入平方米符号,输入立方米符号?
- 2023年玩兔年小游戏《兔兔保卫萝卜战》赢新年祝福「钱兔无量」
- IntelliJ IDEA 编译Java代码时,中文乱码问题
- 【商品架构day10】一个商品系统的需求有哪些 - 从产品层面说起
- centos php 中文乱码,XShell连接CentOS 7.2显示中文乱码问题的解决方法
- EcoVadis认证/EcoVadis企业社会责任评估流程
- css表格中下拉菜单怎么设置,css如何实现下拉菜单?css实现下拉菜单的方法(完整代码)...