# 迪米特原则
定义:一个对象应该对其他对象保持最少的了解。又叫最少知道原则
核心:尽量降低类与类之间的耦合
优点:降低类之间的耦合
强调:只和朋友交流,不和陌生人说话
什么是朋友?出现在成员变量、方法的输入、输出参数中的类称为朋友类,而出现在方法体内部的类不属于朋友类
# coding
场景:老板给小组长下达指令,查询在线课程数量
public class Boss {
public void commandCheckNumber(TeamLeader teamLeader) {
// 老板获取到所有的课程
List<Course> list = new ArrayList<>();
for (int i = 0; i < 20; i++) {
list.add(new Course());
}
// 对小组长下达检查指令
teamLeader.checkNumber(list);
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
public class TeamLeader {
public void checkNumber(List<Course> list) {
// 假设在检查逻辑
System.out.println("在线课程数量是:" + list.size());
}
}
1
2
3
4
5
6
2
3
4
5
6
public class Course {
}
1
2
2
public class Test {
public static void main(String[] args) {
Boss boss = new Boss();
TeamLeader teamLeader = new TeamLeader();
boss.commandCheckNumber(teamLeader);
}
}
1
2
3
4
5
6
7
2
3
4
5
6
7
在线课程数量是:20
1
对于这个场景来说,boss 是不需要知道 Course 的,只要给 TeamLeader 下达指令,然后 TeamLeader 报告结果即可。
哪些是 Boss 的朋友? TeamLeader (入参)
哪些不是 Boss 的朋友? Course,既不是成员变量、方法的输入、输出参数,而只是方法体内部的类。
# 迪米特原则改造
只是把非朋友类逻辑移动到 TeamLeader 中了。
public class TeamLeader {
public void checkNumber() {
// 老板获取到所有的课程
List<Course> list = new ArrayList<>();
for (int i = 0; i < 20; i++) {
list.add(new Course());
}
System.out.println("在线课程数量是:" + list.size());
}
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
这里对于 TeamLeader 来说,Course 貌似又不是它的朋友了,但是这个是属于 TeamLeader 的职责