第11章 迪米特法则(LoD 笔记)
迪米特法则(Law of Demeter)又叫做最少知识原则(Least Knowledge Principle),就是说,一个对象应当对其他对象有尽可能少的了解。
狭义的迪米特法则
如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用。如果其中的一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。
不满足迪米特法则的系统
这里要讨论的系统由三个类组成,分别是Someone,Friend和Stranger。其中Someone与Friend是朋友,而Friend与Stranger是朋友。系统的结构图如下图所示。
从上面的类图可以看出,Friend持有一个Stranger对象的引用,这就解释了为什么Friend与Stranger是朋友。为了解释为什么Someone与Friend是朋友,参见Someone的源码:
public class Someone {public void operation1(Friend friend) {Stranger stranger = friend.provideStranger();stranger.operation3();}}
public class Friend {private Stranger stranger = new Stranger();public void operation2() {}public Stranger provideStranger() {return stranger;}}
public class Someone {public void operation1(Friend friend) {friend.forward();}}
public class Friend {private Stranger stranger = new Stranger();public void operation2() {}public void forward {stranger.operation3();}}