Appearance
迪米特法则
- 迪米特法则又叫最少知道原则
- 含义:如果两个实体无需直接通讯,那么就不应当发生直接的调用关系,可以通过第三方转发该调用,其目的是降低类之间的耦合度,提高模块的独立性
- 只和你的朋友直接交谈,不跟“陌生人”说话(talk only to your immediate friends and not to strangers)
- 迪米特法则的“朋友”是指:当前对象本身,当前对象的成员对象,当前对象所创建的对象,当前对象的方法参数等。这些对象同当前对象存在关联、聚合、组合等关系,可以直接访问这些对象的方法
例:
球星们由于全身投入训练和比赛中,所以许多日常的事务都是由经纪人负责处理,如签约品牌代理,和球迷互动等。这里的经纪人就是球星的朋友,而粉丝和品牌公司对于球星来说是陌生人,所以适合迪米特法则。其UML图如下
代码
球星
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;
}
}
分析
- 因为球星和粉丝、代理公司不需要直接往来,通过第三方经纪人,降低了耦合度,提高了模块的独立性