迪米特法則 (最少知道原則)
迪米特法則又叫最少知道原則,即一個(gè)類對(duì)自己依賴的類知道的越少越好。不管被依賴的類有多么的復(fù)雜,都盡量將邏輯封裝在類的內(nèi)部。除了提供 public 方法以外,不對(duì)外泄露其他信息
-
迪米特法則只與直接的朋友進(jìn)行通信
直接朋友:
- 成員變量
- 方法參數(shù)
- 方法返回值
案例
案例需求描述:現(xiàn)在有一個(gè)老板、一個(gè)領(lǐng)導(dǎo)、十個(gè)員工。老板需要十個(gè)員工每天喊 “老板好”
public class Boss {
public void notice() {
Leader leader = new Leader(); // 應(yīng)當(dāng)將 Leader 提升為成員變量
List<Employee> employees = leader.getEmployees(); // 這里老板直接使用了員工類,員工是老板的下下級(jí),應(yīng)該由 Leader 來通知
employees.forEach(employee -> employee.say("老板好"));
}
}
public class Leader {
public List<Employee> getEmployees() {
List<Employee> employees = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Employee employee = new Employee();
employee.setId(i + 1);
employees.add(employee);
}
return employees;
}
}
public class Employee {
private int id;
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void say(String str) {
System.out.println("員工" + this.id + "說: " + str);
}
}
public class Main {
public static void main(String[] args) {
Boss boss = new Boss();
boss.notice();
}
}
現(xiàn)在我們針對(duì)這個(gè)案例使用迪米特法則進(jìn)行優(yōu)化
優(yōu)化思路:老板不需要知道每個(gè)員工信息,他也不需要單獨(dú)對(duì)每個(gè)員工進(jìn)行對(duì)話,他只需要吩咐給經(jīng)理就行了。由經(jīng)理做事情
public class Boss {
private final Leader leader = new Leader();
public void notice() {
leader.notice("老板好");
}
}
public class Leader {
public List<Employee> getEmployees() {
List<Employee> employees = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Employee employee = new Employee();
employee.setId(i + 1);
employees.add(employee);
}
return employees;
}
public void notice(String str) {
this.getEmployees().forEach(employee -> employee.say("老板好"));
}
}
Main 和 Employee 類不需要進(jìn)行修改
通過迪米特法則優(yōu)化后可以看出 Boss 與員工沒有了直接的接觸了
ps: 我對(duì)迪米特法則的理解就是,依賴應(yīng)該有層次,一級(jí)只能依賴一級(jí),不能跨級(jí)依賴。換個(gè)比方就是,老板不需要知道每個(gè)員工做什么,只需要管理他的下一級(jí)