迪米特原则详解(定义优点及应用举例)

迪米特原则详解(定义优点及应用举例)-mikechen

迪米特原则定义

迪米特法则,是指一个对象应该对其他对象保持最少的了解,又称最少知识原则(Least Knowledge Principle),简称LKP。

迪米特法则的意思是:一个软件实体对其他实体的引用越少越好,或者说如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用,而是通过引入一个第三者发生间接交互。

 

迪米特原则作用

迪使用迪米特法则将有以下三个优点:

  1. 迪米特法则可降低系统的耦合度,使类与类之间保持松散的耦合关系;
  2. 降低了类之间的耦合度,提高了模块的相对独立性;
  3. 由于亲合度降低,从而提高了类的可复用率和系统的扩展性。

 

迪米特原则思想

当两个类之间直接通信的时候,会造成高度依赖的后果(高耦合),解决此问题的办法,尽量避免两个类直接接触(低耦合),通过一个第三者做转发。

迪米特原则主要强调只和朋友交流,不和陌生人说话。

那么,如何界定朋友?如何界定陌生人呢?

迪米特法则指出,做为“朋友”的条件为:

  • 当前对象本身(this);
  • 被当做当前对象的方法的参数传入进来的对象;
  • 当前对象的方法所创建或者实例化的任何对象;
  • 当前对象的任何组件:被当前对象的实例变量引用的任何对象;
  • 任何一个对象,如果满足上面的条件之一,就是当前对象的“朋友”,否则就是“陌生人”。

 

迪米特原则案例

这么看不太形象,我们还是举例一个例子:不要和陌生人说话的经典例子。

比如:关系:你->朋友>陌生人,你和陌生人之间不能直接通信,你只能通过加入第三者朋友进行通信,从而达到解耦效果。

如下图所示:

迪米特原则详解(定义优点及应用举例)-mikechen

示例如下:

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面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法