迪米特法则(Low of Demeter)

又叫做最少知识原则(Least Knowledge Principle,LKP)它是指一个对象应当对其他的对象有尽可能少的了解,不必与不认识的人直接联系。要求每个方法只能给有限的对象发送消息。包括参数,(this)伪对象和this的直接子对象。

  狭义:如果两个类不直接通信,那么这两个类就不应该发生直接的相互作用,如果一个类想要调用另一个类的方法,可以通过第三方转发这个调用。
    广义:一个模块设计的好坏,一个重要的标志就是该模块在多大的程度上把自己内部数据和实现的有关细节隐藏起来。

优势:
    有利于减低类与类之间的耦合度,由于类与类之间去除了依赖关系,各个软件功能模块相互独立。
    遵循迪米特法则设计的模块,如果系统需要扩展,更加符合开闭原则对修改关闭的要求。
    将内部数据和实现细节隐藏,从而使各个功能模块达到提高代码的可维护性和可重用性。
    例如,假如有一个MaterialManager对象,该对象有一个方法接收了一个Tub对象作为参数,Tub对象有一个属性Location,该属性返回了一个Machine对象。用来表示桶放置的位置。假设在MaterialManager方法中,你想知道桶放置的位置,可能在代码中这样写:
    if(tub.getLocation().isUp()){}

// 这就违反了迪米特法则,因为location对象有任何的变化都有可能导致程序出错,若是location对象为空,则该方法会抛出异常。
    所以需要统一的地方管理这些潜在的问题,避免在多个地方重用。
    在spring中的运用:
    IOC作为spring框架的核心部分,无需使用编码就可以对各类程序之间进行控制,并且是可以通过容器即可进行管理,需要注意的是,IOC容器能够提供了组件需要运行的环境,
    并且对组件的有关声明周期进行维护和指导。
    例如:组件X依赖于组件Y,组件Y掌握了控制权,但是应用程序无需了解依赖的具体实现,只需创建某种服务的相关对象进行松散耦合。

例如:在解放前中共地下组织实行的单线联系方式,某男性党员只需与联络人联络,联络人只需与某女性党员直接联系。

//男性党员
public class SomeMan
{private LinkMan linkMan;public LinkMan getLinkMan(){return linkMan;}public void setLinkMan(LinkMan linkMan){this.linkMan = linkMan;}public void play(LinkMan linkMan){//}}
//联络人
public class LinkMan
{public void play(){//}public String playWithSomeGirl(){SomeGril someGril = new SomeGril();String msg = "aaaa";someGril.play(msg);}}
//接口类
public interface IGril
{public String play(String msg);
}
//实现类,女性党员
public class SomeGril implements IGril
{public String play(String msg){// return msg;}
}
//测试类
public class SuccessRun
{public static void main(String[] args){SomeMan jerry = new SomeMan();jerry.setLinkMan(new LinkMan());if(jerry.getLinkMan()!=null){jerry.getLinkMan().playWithSomeGirl();}}
}

迪米特法则(Low of Demeter)相关推荐

  1. 迪米特法则(Law of Demeter) 简介

    在Java里class设计经常会提到一些个原则或者规则 最出名的莫非是 封闭-开放原则了(closed-open principle) 而这次这个 Law of Demeter 也是挺重要的. 一, ...

  2. 迪米特法则 (Law of Demeter)

    迪米特法则 (Law of Demeter) 定义:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用.其目的是降低类之间的耦合度,提高模块的相对独立性. 迪米特法 ...

  3. 软件设计原则(六)迪米特法则 -Law of Demeter

    LoD,Law of Demeter: 又称最少知识原则(Least Knowledge Principle),一个对象应该对其他对象有最少的了解 一个类对自己依赖的类知道的越少越好.也就是说,对于被 ...

  4. 迪米特法则(Law Of Demeter)

    定义:一个对象应该对其他对象保持最少的了解. 问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大. 解决方案:尽量降低类与类之间的耦合. 自从我们接触编程开始,就 ...

  5. 5、迪米特法则(Law of Demeter)

    concept Each unit should have only limited knowledge about other units: only units "closely&quo ...

  6. 无熟人难办事?—迪米特法则

    <大话设计模式>中迪米特法则(Law of Demeter, LoD)也叫最少知识原则(Least Knowledge Principle, LKP)定义如下: 迪米特法则(Law of ...

  7. 2016-12-28 迪米特法则+依赖倒转原则+里氏替换原则

    依赖倒转原则 依赖倒转原则,也翻译成依赖倒置原则,抽象不应该依赖细节,细节应该依赖于抽象,要针对接口编程,而不是对实现编程.如电脑中无论主板.CPU.内存.硬盘都是针对接口设计的,PC电脑硬件的发展, ...

  8. 设计原则(5)-迪米特法则

    本文转自:http://www.cnblogs.com/guoshiandroid/archive/2010/06/19/1760671.html 迪米特法则 慈禧太后为何不和陌生人说话  应用场景举 ...

  9. 六大设计模式原则-迪米特法则

    一.迪米特法则定义 迪米特法则又最少知识原则,其定义如下: 迪米特法则(Law of Demeter, LoD):一个软件实体应当尽可能少的与其他实体发生相互作用. 二.迪米特法则描述 如果一个系统满 ...

最新文章

  1. 【数字信号处理】相关函数应用 ( 时差估计 | TOA 时差估计使用场景 | TDOA 时差估计使用场景 )
  2. muduo学习笔记 日志类
  3. 从svn导入项目后处理一些报错信息
  4. 淘汰率最高的腾讯产品面试题
  5. 机器学习中的数学(七)--凸优化的基础知识
  6. 查看sql server 数据库连接数
  7. 钉钉在线求饶?五星分期付款?爬取钉钉App Store真实评价数据并分析
  8. php28,ajax2—php(28)
  9. OpenCV官方网站:这里可以白嫖教程、检索API、下载例程
  10. 空间数据平台SDP - 医疗药品门店数字化营销
  11. python自动排版公众号_GitHub - sunshine2337/maxpress: MaxPress:MarkDown+Python实现微信公众号一键排版...
  12. 树莓派无法连接vnc,树莓派 vnc viewer 显示 cannot currently show the desktop 的解决方法
  13. C#数据Encrypt加密Encrypt解密的算法使用
  14. PIL(pillow)读取图片自动旋转的问题
  15. python天眼查爬虫_普通用户的天眼查爬取
  16. PHP学习-数据类型
  17. pandas一列拆分成多行
  18. 移动端使用fiddler抓包步骤
  19. English trip V1 - 11.What's That? 那是什么?Teacher:Patrick Key:There's/There are
  20. Git的下载、安装与配置

热门文章

  1. 一次当晋级评委的经历
  2. 数据结构实验——实验二链表实验
  3. mysql xtrabackup_编写脚本令Xtrabackup对MySQL数据进行备份的教程
  4. java ftp删除_java ftp实现文件上传和删除
  5. JLayeredPane
  6. spotify电脑下载歌曲_Spotify开源Klio, 音频处理从业者的福音来了
  7. [开源名人录] Fabrice Bellard
  8. 【学习笔记】信息系统项目监理“四控三管一协调”以及监理工作的分类和监理单位的作用
  9. 深入理解流,什么是流?
  10. 王爽汇编语言 实验15