在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据6条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。这六条分别是开闭原则、里氏代换原则、依赖倒转原则、接口隔离原则、迪米特法则、合成复用原则,下面主要介绍里迪米特法则。

迪米特法则又叫最少知识原则。

只和你的直接朋友交谈,不跟“陌生人”说话(Talk only to your immediate friends and not to strangers)。

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

迪米特法则中的“朋友”是指:当前对象本身、当前对象的成员对象、当前对象所创建的对象、当前对象的方法参数等,这些对象同当前对象存在关联、聚合或组合关系,可以直接访问这些对象的方法。

下面看一个例子来理解迪米特法则

【例】明星与经纪人的关系实例

明星由于全身心投入艺术,所以许多日常事务由经纪人负责处理,如和粉丝的见面会,和媒体公司的业务洽淡等。这里的经纪人是明星的朋友,而粉丝和媒体公司是陌生人,所以适合使用迪米特法则。

类图如下:

代码如下:

明星类(Star)

publicclassStar{privateString name;publicStar(String name){this.name=name;}publicStringgetName(){return name;}}

粉丝类(Fans)

publicclassFans{privateString name;publicFans(String name){this.name=name;}publicStringgetName(){return name;}}

媒体公司类(Company)

publicclassCompany{privateString name;publicCompany(String name){this.name=name;}publicStringgetName(){return name;}}

经纪人类(Agent)

publicclassAgent{privateStar star;privateFans fans;privateCompany company;publicvoidsetStar(Star star){this.star = star;}publicvoidsetFans(Fans fans){this.fans = fans;}publicvoidsetCompany(Company company){this.company = company;}publicvoidmeeting(){System.out.println(fans.getName()+"与明星"+ star.getName()+"见面了。");}publicvoidbusiness(){System.out.println(company.getName()+"与明星"+ star.getName()+"洽淡业务。");}}

迪米特法则模式:迪米特法的则通俗理解相关推荐

  1. 迪米特法则 php,迪米特法则(The Law of Demeter) -解道Jdon

    迪米特法则 父母都会教育孩子们,不要和陌生人讲话,如果有陌生人试图和他们讲话,必须告诉爸爸妈妈,这是因为孩子们还不成熟,会相信一切成人告诉他们的事情,我们这样做是为了包含他们. 在面向对象编程中,我们 ...

  2. 报童、钱包和迪米特法则(设计模式迪米特原则经典论文翻译)

    写在文章前: 或许你写过无数代码,参与过很多大型系统的设计,但,你是否曾经思考过,你的设计可扩展.易维护么,在高速变化的互联网世界里,它能经得起这种急速变化的考验么?如果你没想过这些问题,那请先放下你 ...

  3. (转)云计算的三种模式:IaaS、PaaS和SaaS 通俗理解

    突然想了解下有关云的一些知识,于是整理了一些资料供自己学习和理解. "云计算"已经越来越普遍,简单来说这就是一种共享资源的形式,不过是通过云来共享分布式的资源."云&qu ...

  4. 云计算的三种模式:IaaS、PaaS和SaaS 通俗理解

    突然想了解下有关云的一些知识,于是整理了一些资料供自己学习和理解. "云计算"已经越来越普遍,简单来说这就是一种共享资源的形式,不过是通过云来共享分布式的资源."云&qu ...

  5. 迪米特法则(设计模式5)

    迪米特法则: 迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说 ...

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

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

  7. JAVA设计模式六大原则:(5)迪米特法则

    1 定义 迪米特法则定义:一个对象应该对其他对象保持最少的了解. 2 描述 问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大. 解决方案:尽量降低类与类之间的耦 ...

  8. 面向对象编程原则(09)——迪米特法则

    版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 参考资料 <大话设计模式> 作者:程杰 <Java设计模式> 作者:刘 ...

  9. 大熊君说说JS与设计模式之(门面模式Facade)迪米特法则的救赎篇------(监狱的故事)...

    一,总体概要 1,笔者浅谈 说起"门面"这个设计模式其实不论新老程序猿都是在无意中就已经运用到此模式了,就像我们美丽的JS程序员一样不经意就使用了闭包处理问题, 1 functio ...

最新文章

  1. for循环:用turtle画一颗五角星
  2. 阿里云查看mysql是否安装_阿里云CentOS服务器mysql安装
  3. python三种基本控制结构_Python学习手册之控制结构(一)
  4. JVM调优总结(四)-垃圾回收面临的问题
  5. redis 保存 array list 区别_为什么Redis的RDB备份不用多线程实现CopyOnWrite?
  6. mongodb的IO测试工具 mongoperf
  7. 专访微软Greg Yang,构建神经网络的底层语言,探索AI的“万物理论”
  8. python必备入门代码-小白入门Python开发,必备技能有哪些?
  9. js复杂对象和简单对象的简单转化
  10. Django - 请求与响应、表单、中间件、上下文处理器
  11. 原生安卓10怎么打开面部识别_安卓手机运行慢怎么办?只需简单一步立即提速翻倍...
  12. My validator 0.1 不支持 ajax 环境
  13. 【深入浅出imx8企业级开发实战 | 01】imx8qxp yocto工程构建指南
  14. 代码整洁之道-读书笔记
  15. JAVA计算机毕业设计针织企业外包系统Mybatis+系统+数据库+调试部署
  16. 如何使用计算机处理文件,怎么处理电脑的缓存文件
  17. 高性能MySQL之 Chapter13
  18. 基于SNMP的信息刺探扫描与防护策略
  19. 客户关系管理的很好的例子
  20. linux降级安装补丁,Adobe Shockwave Player降级安装漏洞

热门文章

  1. Android修改ro.debuggable 的第五种方法
  2. 黑马程序员_JAVA之IO流的(转换流,数据输入输出流等)
  3. 《Python编程:从入门到实践》读书笔记——第5章:if语句
  4. H ICPC Standings
  5. struct和typedef struct的区别
  6. vulnhub靶场-Ripper
  7. 深入理解feature_column
  8. 2012年MacBook更换SSD固态硬盘和16G内存条
  9. 浅谈Mybatis内置数据源
  10. 来自“飞人”乔丹的启示!奥尼尔开启的另一个“赛场”