Skip to content
On this page

迪米特法则

  • 迪米特法则又叫最少知道原则
  • 含义:如果两个实体无需直接通讯,那么就不应当发生直接的调用关系,可以通过第三方转发该调用,其目的是降低类之间的耦合度,提高模块的独立性
  • 只和你的朋友直接交谈,不跟“陌生人”说话(talk only to your immediate friends and not to strangers)
  • 迪米特法则的“朋友”是指:当前对象本身,当前对象的成员对象,当前对象所创建的对象,当前对象的方法参数等。这些对象同当前对象存在关联、聚合、组合等关系,可以直接访问这些对象的方法

例:

球星们由于全身投入训练和比赛中,所以许多日常的事务都是由经纪人负责处理,如签约品牌代理,和球迷互动等。这里的经纪人就是球星的朋友,而粉丝和品牌公司对于球星来说是陌生人,所以适合迪米特法则。其UML图如下

image-20220912000143286

代码

球星

java
package com.huangjiliang.design.heima.principle.demo5;

import lombok.Getter;

@Getter
public class Start {

    private String name;

    public Start(String name) {
        this.name = name;
    }

}

经纪人

java
package com.huangjiliang.design.heima.principle.demo5;


public class Agent {

    private Start start;
    private Fans fans;
    private Company company;

    public void setStart(Start start) {
        this.start = start;
    }

    public void setFans(Fans fans) {
        this.fans = fans;
    }

    public void setCompany(Company company) {
        this.company = company;
    }

    public void meeting() {
        System.out.println("安排" + start.getName() + " 球星与粉丝:" + fans.getName() + "相见");
    }

    public void business() {
        System.out.println("安排" + start.getName() + " 球星与" + company.getName() + "公司签约");
    }

}

粉丝

java
package com.huangjiliang.design.heima.principle.demo5;

import lombok.Getter;

@Getter
public class Fans {

    private String name;

    public Fans(String name) {
        this.name = name;
    }

}

公司

java
package com.huangjiliang.design.heima.principle.demo5;

import lombok.Getter;

@Getter
public class Company {

    private String name;

    public Company(String name) {
        this.name = name;
    }

}

分析

  • 因为球星和粉丝、代理公司不需要直接往来,通过第三方经纪人,降低了耦合度,提高了模块的独立性