迪米特原则这么说:一个对象应该对其他对象有最少的了解。通俗地讲,一个类应该对自己需要耦 合或调用的类知道得最少,你(被耦合或调用的类)的内部是如何复杂都和我没关系,那是你的事情,我就知 道你提供的这么多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):迪米特原则相关推荐

  1. 设计原则之迪米特原则

    迪米特原则 Law of Demeter, LOD 迪米特原则定义 迪米特原则也叫最小知识原则(The Least Knowledge Principle).即,每个模块只应该了解那些与它关系密切的模 ...

  2. 软件设计原则之接口隔离原则、合成复用原则、迪米特原则

    系列文章目录 软件设计原则之单一职责原则.开闭原则 软件设计原则之里氏替换原则.依赖倒置原则 软件设计原则之接口隔离原则.合成复用原则.迪米特原则 文章目录 系列文章目录 一.接口隔离原则 什么是接口 ...

  3. 【学习笔记】慕课网—Java设计模式精讲 第3章 软件设计七大原则-3-6 迪米特原则(最少知道原则)...

    /** * 软件设计七大原则-迪米特原则 学习笔记 * @author cnRicky * @date 2018.11.10 */ 迪米特原则(最少知道原则) 一个对象应该对其他对象保持最少的了解.又 ...

  4. C# 设计原则 之 迪米特 原则

    迪米特法则又叫作最少知道原则,一般设计用于 对类内部 进行 合适的封装. 下面举例: 人关闭电脑的 示例 1.1没有实现 迪米特原则的 代码 namespace 迪米特 {internal class ...

  5. 六大设计原则之迪米特原则

    迪米特原则的定义 迪米特原则(Law of Demeter,LoD),也叫最少知识原则(Low knowledge Principle,LKP): 一个对象应该对其他对象有最少的了解. 通俗的讲:一个 ...

  6. 设计模式-设计原则之迪米特原则

    例子 假设老板给项目组长下达一个任务,让其去查询课程的数量 代码 public class Course {} public class TeamLeader {public void checkNu ...

  7. 设计模式:六大原则之迪米特原则

    迪米特原则 基本介绍 定义:迪米特法则也称为最少知识原则,即一个对象应该对其他对象有最少的了解.通俗地说,一个类应该对自己需要耦合或调用的类知道的最少,被调用或耦合的类的内部是如何复杂都和我没有关系. ...

  8. 程序设计原则之迪米特原则

    一.什么是迪米特原则 迪米特原则也叫最小知道原则,即对其他的类尽量保持最少知道.只关心自己的直接朋友类,而不关心其他的类. 直接朋友类:出现在自己的域中.方法入参中.方法出参中的类叫直接朋友类:那些在 ...

  9. 面向对象的六大原则之 —— 迪米特原则

    学习了何红辉.关爱民写的<Android设计模式>,对于面向对象的六大原则有进一步的理解,特此根据自己的理解记录总结一下 什么是迪米特原则 也称为最少知识原则,意思就是一个对象应该对其他对 ...

  10. 设计模式(6)之七大原则之迪米特原则

    一.定义 迪米特法则(Law of Demeter,LoD)又叫作最少知识原则(Least Knowledge Principle,LKP),产生于 1987 年美国东北大学(Northeastern ...

最新文章

  1. 【ACM】杭电OJ 2034
  2. 华为算力最强AI芯片商用:2倍于英伟达V100!开源AI框架,对标TensorFlow和PyTorch...
  3. oracle10g重新配置crs,Oracle 10G RAC一节点系统重做后修复
  4. vs显式导入(代码注入)依赖库
  5. 深度学习核心技术精讲100篇(四十四)-深度召回在招聘推荐中的挑战和实践
  6. MySQL局域网内访问慢的原因及解决方法
  7. 基于蒙特卡罗模拟的金融风险评估-函数调用关系图
  8. Centos 5.2安装Cacti并集成Nagios安装文档
  9. php if多条件_通过PHP与Python代码对比浅析语法差异
  10. masm32 安装过程(记录)
  11. 电力拖动自动控制系统(序)
  12. android 自定义locale,关于android:设置Locale.setDefault(locale)后,如何获取手机语言?...
  13. html方框打勾字段,word文档怎么输入带方框的对勾
  14. swoole开发多人在线游戏新手教程
  15. jmu-python-生日悖论(熟练掌握随机数的生成以及检查重复)
  16. 使用正则批量修改文件名
  17. cpolra实现内网穿透,无须公网ip
  18. MT6765中断处理IO口配置流程
  19. 上海东原从“野心家”到“大玩家” 连接江湖“人情味”
  20. openlayers3.20.1发布说明

热门文章

  1. Java将网络图片下载至文件夹,然后将文件夹压缩成zip
  2. H3C核心交换机获取所有IP地址和MAC地址
  3. 首届可视化网络安全技术论坛开讲,大腕云集干货足
  4. 【转】在Excel中如何输入平方米符号,输入立方米符号?
  5. 2023年玩兔年小游戏《兔兔保卫萝卜战》赢新年祝福「钱兔无量」
  6. IntelliJ IDEA 编译Java代码时,中文乱码问题
  7. 【商品架构day10】一个商品系统的需求有哪些 - 从产品层面说起
  8. centos php 中文乱码,XShell连接CentOS 7.2显示中文乱码问题的解决方法
  9. EcoVadis认证/EcoVadis企业社会责任评估流程
  10. css表格中下拉菜单怎么设置,css如何实现下拉菜单?css实现下拉菜单的方法(完整代码)...