千家信息网

迪米特法则

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,个人原文:迪米特法则(手机上看电子书)设计模式六大原则之五:迪米特法则。简介姓名:迪米特法则英文名:Law of Demeter小名:最少知识原则小名英文名:Least Knowledge Princ
千家信息网最后更新 2026年11月01日迪米特法则

个人原文:
迪米特法则(手机上看电子书)

设计模式六大原则之五:迪米特法则。

简介

姓名:迪米特法则

英文名:Law of Demeter

小名:最少知识原则

小名英文名:Least Knowledge Principle

价值观:妈妈说不和陌生人说话

个人介绍:

  1. Each unit should have only limited knowledge about other units: only units "closely" related to the current unit. (每个单元对于其他的单元只能拥有有限的知识:只是与当前单元紧密联系的单元)
  2. Each unit should only talk to its friends; don't talk to strangers. (每个单元只能和它的朋友交谈:不能和陌生单元交谈)
  3. Only talk to your immediate friends. (只和自己直接的朋友交谈)
    (来自维基百科)

还是脑洞大开来个小故事。这故事还是比较现实一些,其实也不算是故事,就是咱们经常经历的事情,现在知识付费已经广受欢迎,18 年底更是快速猛涨,各种各样的培训、读书、音频学习软件如雨后春笋一般涌现出来。我们就拿一个读书的例子。

有一天,设计模式老师讲解了迪米特法则,同学们听得云里雾里的,老师怕同学们没掌握这个知识点,就给同学们布置了一个作业,需要同学们按迪米特法则实现。

作业是这样子的:平常在零碎的时间里,喜欢看一些书籍,一般都是电子书,现在我们看书的操作是这样的:唤醒手机,打开阅读软件,选择书籍,然后阅读。总共 3 个步骤,涉及了 3 样东西:手机、软件、书籍。同学们用代码实现这个过程。

第二天上课,同学们纷纷交了作业,老师随手一番,就看到了 2 个鲜明的例子,很明显,就是一好一坏。老师便给同学们讲解了这 2 个例子,让学生感受一番迪米特法则。

错误例子

public class LODErrorTest {    public static void main(String[] args) {        Phone phone = new Phone();        phone.readBook();    }}/** * 错误的示范 */class Phone {    App app = new App();    Book book = new Book("设计模式");    public void readBook() {        app.read(book);    }}class App {    public void read(Book book) {        System.out.println(book.getTitle());    }}class Book {    private String title;    public Book(String title) {        this.title = title;    }    public String getTitle() {        return title;    }    public void setTitle(String title) {        this.title = title;    }}

代码:
LODErrorTest

代码是完成了读书这个过程,看样子是功能实现了,细看会发现代码的逻辑不对。哪里不对呢?书籍和应用对象都在手机上,现实是我们唤醒手机,这时手机是没有书籍的,只有当我们打开阅读软件,才有书籍可以看,没有阅读软件,书籍是看不了的。因此,手机和书籍没有一毛钱关系,书籍不应该在手机里面。正常的设计是:手机里面有阅读软件,阅读软件里面有书籍,这才符合迪米特法则,按定义来说:手机和阅读软件是朋友,阅读软件和书籍是朋友,可是朋友的朋友不是朋友,也就是手机和书籍不是朋友,所以它们不应该有交集,应该离得远远的。

思考一下现实:工作中如果缺少代码复核这个步骤,就会出现这样子,后果是怎么样呢?会给后人挖坑,而且是大坑,因为和现实中的逻辑是对不上的,况且后人不知道当时的业务背景,只能看代码去熟悉,就会一步错、步步错,所以要好好把控代码质量这一关,因为代码千人千面,没法要求代码风格全部一致,但至少需要实现逻辑是清晰易懂的。

正确例子

public class LODRightTest {    public static void main(String[] args) {        Phone2 phone2 = new Phone2();        phone2.readBook();    }}/** * 正确的示范 */class Phone2 {    private App2 app2 = new App2();    public void readBook() {        app2.read();    }}class App2 {    private Book2 book2 = new Book2("设计模式");    public void read() {        System.out.println(book2.getTitle());    }}class Book2 {    private String title;    public Book2(String title) {        this.title = title;    }    public String getTitle() {        return title;    }    public void setTitle(String title) {        this.title = title;    }}

代码:
LODRightTest

这段代码就符合迪米特法则,手机中有阅读软件,阅读软件中有书籍,手机没有书籍任何影子。正确代码不用细讲,用心去感受就可以体会到。

总结

迪米特法则主要讲述的观点是高内聚、低耦合。我理解为:是你的,就别给别人;不是你的,就别拿。上面定义的朋友也是这个意思。

写到这,第五个原则了,六大原则就剩下最后一个开闭原则,凑齐 6 把大刀就可以准备去大干 23 个大汉啦。。。想想都激动。

希望文章对您有所帮助,设计模式系列会持续更新,感兴趣的同学可以关注公众号,第一时间获取文章推送阅读,也可以一起交流,交个朋友。

书籍 代码 手机 软件 朋友 法则 迪米特 同学 单元 设计 例子 原则 模式 设计模式 现实 知识 老师 故事 逻辑 作业 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 今日互联网科技 互联网巨头科技公司 麻工互联网科技 万易互联网科技 亿策互联网科技 互联网金融科技创新 互联网科技咨询 左右互联网络科技 汉立互联网科技有限公司联系电话 承德科技产业互联网发展 常德市电业局互联网科技部 顶级互联网科技成果有哪些 来此购互联网科技有限公司 允成互联网科技有限公司融资 怎样加入科技互联网 江苏互联网智能科技软件 浙南科技城互联网大厦招聘 互联网科技对化妆品行业 亚光科技低轨卫星互联网 广州全民伙伴互联网科技有限公司 狮子座互联网科技 万易互联网科技有限公司 世界互联网领先科技成果 科技互联网创业计划书 济南和联互联网科技有限公司 互联网时代的科技公司 四川互联网展示科技馆设计 艺电能源互联网科技有限公司招聘 科技发展第三阶段互联网时代 武汉亿视互联网科技有限公司
0