迪米特原则定义
迪米特法则,是指一个对象应该对其他对象保持最少的了解,又称最少知识原则(Least Knowledge Principle),简称LKP。
迪米特法则的意思是:一个软件实体对其他实体的引用越少越好,或者说如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用,而是通过引入一个第三者发生间接交互。
迪米特原则作用
迪使用迪米特法则将有以下三个优点:
- 迪米特法则可降低系统的耦合度,使类与类之间保持松散的耦合关系;
- 降低了类之间的耦合度,提高了模块的相对独立性;
- 由于亲合度降低,从而提高了类的可复用率和系统的扩展性。
迪米特原则思想
当两个类之间直接通信的时候,会造成高度依赖的后果(高耦合),解决此问题的办法,尽量避免两个类直接接触(低耦合),通过一个第三者做转发。
迪米特原则主要强调只和朋友交流,不和陌生人说话。
那么,如何界定朋友?如何界定陌生人呢?
迪米特法则指出,做为“朋友”的条件为:
- 当前对象本身(this);
- 被当做当前对象的方法的参数传入进来的对象;
- 当前对象的方法所创建或者实例化的任何对象;
- 当前对象的任何组件:被当前对象的实例变量引用的任何对象;
- 任何一个对象,如果满足上面的条件之一,就是当前对象的“朋友”,否则就是“陌生人”。
迪米特原则案例
这么看不太形象,我们还是举例一个例子:不要和陌生人说话的经典例子。
比如:关系:你->朋友>陌生人,你和陌生人之间不能直接通信,你只能通过加入第三者朋友进行通信,从而达到解耦效果。
如下图所示:
示例如下:
1.第三者(朋友)
//朋友 public class Friend { public void play(){ System.out.println("朋友"); } public void playWithStranger() { Stranger stranger = new Stranger(); stranger.play(); } }
2.陌生人
public class Stranger { public void play(){ System.out.println("陌生人"); } }
3.你本人:通过朋友才能与陌生人说话
//你 public class You{ private Friend friend; public Friend getFriend() { return friend; } public void setFriend(Friend friend) { this.friend = friend; } public void play(Friend friend){ friend.play(); } }
这种方式,你和陌生人之间就没有了任何直接联系,这样就避免了你和陌生人的耦合度过高,从而降低系统的耦合度。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》