得墨忒耳定律Law of Demeter,缩写LoD)也叫做“最少知识原则”,是一种开发软件的设计原理,特别是面向对象的程序设计,得墨忒耳定律是松耦合的一种特殊情况。该指导原则是1987年末在美国东北大学发明的,该原则可以简单地概括为以下方式之一:

  1. 每个单元对于其他的单元只能拥有有限的知识:只是与当前单元紧密联系的单元;
  2. 每个单元只能和它的朋友交谈:不能和陌生单元交谈;
  3. 只和自己直接的朋友交谈。

很多面向对象程序设计语言用"."表示对象的域的解析算符,因此得墨忒耳定律可以简单地陈述为“只使用一个.算符”。因此,a.b.Method()违反了此定律,而a.Method()不违反此定律。一个简单例子是,人可以命令一条狗行走(walk),但是不应该直接指挥狗的腿行走。应该由狗去指挥控制它的腿如何行走。

优点

得墨忒耳定律使得软件更好的可维护性与适应性。因为对象较少依赖其它对象的内部结构,可以改变对象容器(container)而不用改变它的调用者(caller)。

以上引自维基百科

http://www.dan-manges.com/blog/37

Misunderstanding the Law of Demeter

讲的是不要误用最小知识原则,举了好几个例子,体会到的几点是

1.Thinking again about attribute/getter/setter delegation, it gives classes too much knowledge about other classes. This includes classes that are far away from each other in the domain model

2.Tell, don't ask

感想:

之前看到很多代码特别难以忍受,不知道为什么,现在慢慢知道一点了

得墨忒耳定律(Law of Demeter)相关推荐

  1. 得墨忒耳定律 (Law of Demeter,缩写LoD)

    前言 这篇文章中,我想谈一谈得墨忒耳定律(Law of Demeter,缩写LoD).我觉得这个主题对于写出一手简洁.精心设计和易于维护的代码,是极其重要的. 根据我的经验,看到这条规则被打破,往往意 ...

  2. C#版得墨忒耳定律(迪米特法则)

    最近在度娘搜代码优化,看到了Edison Zhou写的<代码整洁之道>(Clean Code)- 读书笔记,里面有个整理很清楚的思维导图,发现有得墨忒耳定律,就想到面试题里的简单经典的问题 ...

  3. 【设计模式】七大设计原则--------迪米特法则(得墨忒耳定律)(最少知识定律)

    文章目录 1.介绍 2.示例 3.改进 1.介绍 得墨忒耳,是希腊神话的农业女神. 得墨忒耳定律主要内容为: (1)每个单元对于其他的单元只能拥有有限的知识:只是与当前单元紧密联系的单元: (2)每个 ...

  4. 使用函数的得墨忒耳法则来解耦

    编写"羞怯"的代码: 包含两层意思,一个是不向别人暴露你自己,不会没必要的向其他模块暴露任何事情:另一个是不与太多人打交道,不依赖于其他模块实现的模块. 不与太多人打交道,说的就是 ...

  5. 得墨忒耳法则(迪米特法则)

    使用函数的得墨忒耳法则来解耦 编写"羞怯"的代码: 包含两层意思,一个是不向别人暴露你自己,不会没必要的向其他模块暴露任何事情:另一个是不与太多人打交道,不依赖于其他模块实现的模块 ...

  6. 函数的得墨忒耳法则(转)

    函数的得墨忒耳法则 分类: 设计模式与重构 2011-03-21 20:08 58人阅读 评论(0) 收藏 举报 得墨忒耳定律也叫做"最少了解原理",是一种软件设计原理,尤其是应用 ...

  7. html5中meter讲解_Java中的得墨meter耳定律–最少知识原理–实际示例

    html5中meter讲解 得墨meter耳定律(也称为最少知识定律)是一种编码原理,它表示模块不应该知道其操作的对象的内部细节. 如果代码取决于特定对象的内部细节,则很有可能一旦该对象的内部发生更改 ...

  8. Java中的得墨meter耳定律–最少知识原理–实际示例

    得墨meter耳定律(也称为最少知识定律)是一种编码原理,它表示模块不应该知道其操作的对象的内部细节. 如果代码依赖于特定对象的内部细节,则很有可能一旦该对象的内部发生更改,它就会被破坏. 由于封装是 ...

  9. 得墨meter耳定律及其使用方法

    得墨meter耳定律是有趣的编程原理. 这是我所知道的唯一一个近似数学的定义: 对象O的任何方法m只能调用以下类型的对象的方法: O本身 m的参数 在m内创建/实例化的任何对象 O的直接组成对象 全局 ...

最新文章

  1. 笔记-信息系统开发基础-面向对象基本概念-对象和类
  2. catkin_make: command not found
  3. oracle中判断空,Oracle中判断空游标的方法
  4. 在线富文本编辑器FckEditor配置(.Net Framework 3.5)
  5. python展示数据库视图_在Django的视图中使用数据库查询的方法
  6. [设计模式] ------ 抽象工厂模式
  7. oracle入库的速度能到多少_倒车入库别练复杂了,其实就这两点
  8. Java生成.jar库
  9. python模块--subprocess
  10. Google 投资 Lyft 背后、AlphaGo Zero 人工智能威胁论?
  11. Atitit.日志系统slf4j的使用
  12. MySQL的用户授权
  13. 微机原理交通灯控制系统设计
  14. OpenSSH概念和基本用法——SSH 客户端
  15. 数据取证三剑客 ——合天网安实验室学习笔记
  16. 怎么管理好精力,让自己每天精力充沛
  17. 【PC工具】PC好用的迅雷下载版本合集,hash资源下载方法,石皮版迅雷软件去广告优化增强典藏版...
  18. python3 进程池Pool 详解
  19. 在哪里可以批量查询京东快递的单号?
  20. 大天使黎明服务器维护,金山猎豹大天使之剑全服4月17日维护公告

热门文章

  1. 大学毕业生到底要不要选择3D建模?
  2. intval0.57100 php_PHP代码审计归纳-Ali0th
  3. Description 输入3个数,代表三角形的三条边长,判断这三条边是否能构成三角形,如果能, 计算并输出三角形的面积,否则输出NO。 Input 输入包括多组测试数据,每组有三个数,中间用空格隔开
  4. python改变照片格式及尺寸
  5. C语言PTA L1-063吃鱼还是吃肉
  6. java读取ofd文档内容_ofd电子文档内容分析工具(分析文档、签章和证书)
  7. html如何实现页面懒加载,原生JS如何实现图片懒加载
  8. 通达信逐笔接口怎么查询下单明细?
  9. 主机插上网线,网卡灯死活不亮
  10. PIXEL 2XL刷机指南(Android11更新)