迪米特法则,又叫最少知识原则,就是说,一个对象应当对其他对象有尽可能少的了解。
狭义的迪米特法则:
如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相关作用。如果其中的一个类需要调用另外一个类的某种方法的话,可以通过第三者转发这个调用。
缺点:
1.会在系统中造出大量的小方法,散落在系统的各个角落。这些方法仅仅是传递间接的调用,因此与系统的逻辑无关。
2.会造成系统的不同模块之间通信效率的降低,也会使系统的不同模块之间不容易协调。
举例:
假如一个人想认识朋友的朋友,那么这时候他一般会让朋友给对方介绍自己,而不是直接的就上去搭讪(线条连接可以直接交流的双方)。
这个过程的实现就是:
首先得我对朋友说,让他介绍下我给陌生人:
public class Person { private String name = "张三"; public void talking(Friend friend) { System.out.println("你好,我是" + name); friend.introduce(name); } }朋友听到后,会转发这个消息给陌生人:
public class Friend { private Stranger stranger; public void introduce(String name) { stranger.talking(name); } public Stranger getStranger() { return stranger; } public void setStranger(Stranger stranger) { this.stranger = stranger; } }然后陌生人才会响应我发出的消息:
public class Stranger { private String name; public Stranger(String name) { this.name = name; } public void talking(String name) { System.out.println("你好 ," + name + ",我是" + this.name); } }测试:
Stranger stranger = new Stranger("李四"); Friend friend = new Friend(); friend.setStranger(stranger); Person person = new Person(); person.talking(friend);这样,就通过朋友的介绍认识了陌生人。
广义的迪米特法则:
迪米特法则讨论的是对象之间的信息流量,流向及信息的影响控制。它的主要用意是控制信息的过载。在运用的过程中,要注意以下几点:
在类的划分上,应当创建有弱耦合的类。类之间的耦合越弱,越有利于复用。一个处于弱耦合中德类,一旦被修改,不会对有关系的类造成波及。
在类的结构设计中,每一个类都应当尽量降低成员的访问权限。
在类的设计中,只要有可能,一个类应当设计成不变类。
在对其他类的引用上,一个对象对其对象的引用应当降到最低。