我的博客原文:
迪米特法则java
设计模式六大原则之五:迪米特法则。
姓名:迪米特法则git
英文名:Law of Demetergithub
小名:最少知识原则设计模式
小名英文名:Least Knowledge Principleapp
价值观:妈妈说不和陌生人说话学习
我的介绍:this
(来自维基百科)spa
仍是脑洞大开来个小故事。这故事仍是比较现实一些,其实也不算是故事,就是我们常常经历的事情,如今知识付费已经广受欢迎,18 年末更是快速猛涨,各类各样的培训、读书、音频学习软件如雨后春笋通常涌现出来。咱们就拿一个读书的例子。设计
有一天,设计模式老师讲解了迪米特法则,同窗们听得云里雾里的,老师怕同窗们没掌握这个知识点,就给同窗们布置了一个做业,须要同窗们按迪米特法则实现。code
做业是这样子的:日常在零碎的时间里,喜欢看一些书籍,通常都是电子书,如今咱们看书的操做是这样的:唤醒手机,打开阅读软件,选择书籍,而后阅读。总共 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
这段代码就符合迪米特法则,手机中有阅读软件,阅读软件中有书籍,手机没有书籍任何影子。正确代码不用细讲,用心去感觉就能够体会到。
迪米特法则主要讲述的观点是高内聚、低耦合。我理解为:是你的,就别给别人;不是你的,就别拿。上面定义的朋友也是这个意思。
参考资料:《大话设计模式》、《Java设计模式》、《设计模式之禅》、《研磨设计模式》、《Head First 设计模式》
写到这,第五个原则了,六大原则就剩下最后一个开闭原则,凑齐 6 把大刀就能够准备去大干 23 个大汉啦。。。想一想都激动。
但愿文章对您有所帮助,设计模式系列会持续更新,感兴趣的同窗能够关注公众号,第一时间获取文章推送阅读,也能够一块儿交流,交个朋友。