标签:设计模式 最好 str 简单的 tle 一件事 作用 rgs 总结
什么是迪米特法则呢?
迪米特法则(Law of Demeter,简写为: LoD.)又叫作最少知识原则(Least Knowledge Principle 简写LKP),一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象有尽可能少的了解,通俗来讲也就是对于被依赖的类来说,对外除了提供的public方法,向外公开的方法应该尽可能的少。
重点强调:
举例解释:
例1:假如你想办一件事情,但是凭借你自己的能力是做不到的,而你周围的朋友也无法帮你办到,但是恰好你有一个朋友A认识另外一个朋友B可以办成此事,那么你只能拜托你的朋友A中间牵线搭桥,让他的朋友B帮你办好此事,你跟B是陌生人关系。
如果你没有通过你的朋友A,直接引用陌生人B的方法的话,那么这是不符合迪米特法则的。然而上图中,也是不符合的,为什么呢?
这是因为你还是和陌生人B直接关联上了,我们要的是你和陌生人B没有一丁点直接关系。
这种方式,你甲和陌生人B之间就没有了任何直接联系,这样就避免了你和陌生人B的耦合度过高,所以符合迪米特法则。但是思考一下,仍然会存在一个通信效率低的问题,这个问题后续我们再来讨论如何解决。
例2:假设我们看书的操作是这样的:唤醒手机,打开阅读软件,选择书籍,然后阅读。总共 3 个步骤,涉及了 3 样东西:手机、软件、书籍。同学们用代码实现这个过程。
错误的例子:
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; } }
正确的例子:
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; } }
这段代码就符合迪米特法则,手机中有阅读软件,阅读软件中有书籍,手机没有书籍任何影子,没有发生耦合。
总结一下:
参考资料:
https://zhuanlan.zhihu.com/p/54147707?utm_source=qq&utm_medium=social&utm_oi=863821215490527232
标签:设计模式 最好 str 简单的 tle 一件事 作用 rgs 总结
原文地址:https://www.cnblogs.com/veda0612/p/12543352.html