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

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

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

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

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

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

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

类图如下:

代码如下:

媒体公司类(Company)

public class Company {private String name;public String getName() {return name;}public Company(String name) {this.name = name;}
}

粉丝类(Fans)

public class Fans {private String name;public String getName() {return name;}public Fans(String name) {this.name = name;}
}

明星类(Star)

public class Star {private String name;public Star(String name) {this.name = name;}public String getName() {return name;}
}

经纪人类(Agent)

public class Agent {private Star star;private Fans fans;private Company company;public void setStar(Star star) {this.star = star;}public void setFans(Fans fans) {this.fans = fans;}public void setCompany(Company company) {this.company = company;}//和粉丝见面的方法public void meeting() {System.out.println(star.getName() + "和粉丝" + fans.getName() + "见面");}//和媒体公司洽谈的方法public void business() {System.out.println(star.getName() + "和" + company.getName() + "洽谈");}
}

测试类:

public class Client {public static void main(String[] args) {//创建经纪人类Agent agent = new Agent();//创建明星对象Star star = new Star("林青霞");agent.setStar(star);//创建粉丝对象Fans fans = new Fans("李四");agent.setFans(fans);//创建媒体公司对象Company company = new Company("博主很帅媒体公司");agent.setCompany(company);agent.meeting();//和粉丝见面agent.business();//和媒体公司洽谈业务}
}

java设计模式(7):软件设计原则之迪米特法则相关推荐

  1. java 设计模式:软件设计原则、面向对象理论、23 种设计模式

    文章目录 软件设计原则 1.单一职责原则(Single Responsibility Principle) 2.开闭原则(Open Closed Principle) 3.里氏代换原则(Liskov ...

  2. 【实验】软件设计原则,迪米特法则与开闭原则

    (一)实验原理 1.迪米特法则:不要和"陌生人"说话.或只与你的直接朋友通信. 我们称出现成员变量.方法参数.方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友. ...

  3. 设计模式之软件设计原则篇

    3.软件设计原则 本文的内容绝大部分借鉴了https://www.jianshu.com/u/cc272db15285的内容,感兴趣的小伙伴可以进入其简书浏览更细的内容,讲的非常好. 在软件开发中,为 ...

  4. Java设计模式--------面向对象七大设计原则

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.单一职责原则 二.开闭原则 三.接口隔离原则 什么是接口隔离原则 接口隔离原则分析 四.里氏替换原则 继承 为什么 ...

  5. 设计原则之六——迪米特法则

    以下七种设计原则是软件设计模式尽量遵循的原则,各种原则要求的侧重点不同. 开闭原则 是总纲,它告诉我们要对扩展开放,对修改关闭: 里氏替换原则 告诉我们不要破坏继承体系: 依赖倒置原则 告诉我们要面向 ...

  6. 设计模式之美——DRY原则 和 迪米特法则

    DRY原则 Don't Repeat Yourself.中文直译为:不要重复自己.即,不要写重复的代码. 我们主要讲三种典型的代码重复情况:实现逻辑重复.功能语义重复和代码执行重复. 实现逻辑重复 p ...

  7. 设计模式系列之七大原则之——迪米特法则

    ①一个对象应该对其他对象保持最少的了解 ②类与类关系越密切,耦合度越大 ③迪米特法则又叫最少知道原则,即一个类对自己依赖的类知道的越少越好(对于一类被依赖的类,不管是多么复杂,对外只提供方法即可,不去 ...

  8. 6大设计原则之迪米特法则

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

  9. 六大设计原则之迪米特法则

    定义:一个类和另一个类应该保持最小的了解 问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生变化时,对另一个类影响也越大. 解决方案:尽量降低类与类之间的耦合. //总公司员工 class E ...

最新文章

  1. 【GStreamer】gstreamer工具详解之:gst-inspect-1.0
  2. ajax入门实例代码,AJAX、AJAX实例及AJAX源代码
  3. ubuntu系统安装mysql二进制压缩包(tar.gz)以及navicat远程连接服务器(linux系统)
  4. Python批量将ppt转换为pdf
  5. 封装,多态,类的约束,super()深入了解
  6. java局域网邮件_Java内网发送邮件
  7. sql数据库的四大程序设计语言的语句
  8. Spring5 - 向IOC容器中添加组件的4种方式
  9. DL:深度学习框架Pytorch、 Tensorflow各种角度对比
  10. 为UIKeyboardTypeNumberPad增加自定义按键
  11. opera android 7,Opera迷你浏览器 Opera Mini 7
  12. 吃亏受苦、前途未卜,Nature调查显示博士生三分之一可能抑郁
  13. 海奥华预言--第三章 地球上的第一个人
  14. 如何得知mysql表结构发生变化了呢?
  15. 尴尬!三星Galaxy S10系列面部识别疑似翻车:连兄妹都分不清
  16. Mapreduce运行过程分析(基于Hadoop2.4)——(三)
  17. 文件系统VFS数据结构(超级块 inode dentry file)(收集整理)
  18. 《SVN系列教程-第五章-IDEA集成SVN的使用》
  19. Interior-point methods(内点法)学习笔记
  20. 倾斜摄影技术应用之:自动三维建模对输电线路走廊资源快速调查

热门文章

  1. oracle nvarchar2 substr,关于oracle中varchar2与nvarchar2的一点认识 - Qxun_dream
  2. mysql smallint 长度_转:mysql中int、bigint、smallint 和 tinyint的区别与长度的含义
  3. 搭建一套完整的J2EE开发环境
  4. Java使用executeUpdate()导致程序异常
  5. 理想智造失信11次:沈亚楠曾任经理及法人,理想汽车花数亿买牌
  6. PHP+MYSQL动态网页编程纠错指南
  7. 一款强大易用的规则引擎
  8. Java多线程碎碎念
  9. 篮球馆的利润点在哪里?
  10. 下载网站的中视频的方法