一、迪米特法则定义
- 一个对象应当对其它对象有尽可能少的了解,也被成为最少知道原则。
- 意思就是一个类中只与与它有直接关联的类联系,出现在这个类的成员变量、方法的输入,方法参数的类被成为朋友类,其他无直接关联的类尽量少知道这些类。
- 所以迪米特法则强调只和最亲的朋友类有联系,对其他类不交流
二、举例理解
老师想从学生那里知道假期一共留了几门作业,所以Teacher–>StudentA 是直接关系,老师调用学生,StudentA–>homework 是直接关系,但老师和课程Teacher–>homework 没有直接关系,所以依据迪米特最少知道原则,Teacher类中不能出现homework类的信息,错误和正确示例代码如下:
不遵循迪米特法则的代码:
Teacher 类中直接注入了与之不相干的Homework类
public class Homework {
}
public class Teacher {
public void checkHomework(StudentA studentA){
List<Homework> arrayList = new ArrayList<>();
for (int i = 0; i < 5; i++) {
arrayList.add(new Homework());
}
studentA.checkHomeworkSum(arrayList);
}
}
public class StudentA {
public void checkHomeworkSum(List<Homework> homework){
System.out.println("假期一共留了多少门作业:" + homework.size() + "门");
}
}
public class DemeterTest {
public static void main(String[] args) {
Teacher teacher = new Teacher();
StudentA studentA = new StudentA();
teacher.checkHomework(studentA);
}
}
遵循法则的代码:
public class Homework {
}
public class Teacher {
public void checkHomework(StudentA studentA){
studentA.checkHomeworkSum();
}
}
public class StudentA {
private List<Homework> arrayList = new ArrayList<>();
public void checkHomeworkSum(){
for (int i = 0; i < 5; i++) {
arrayList.add(new Homework());
}
System.out.println("假期一共留了多少门作业:" + arrayList.size() + "门");
}
}
public class DemeterTest {
public static void main(String[] args) {
Teacher teacher = new Teacher();
StudentA studentA = new StudentA();
teacher.checkHomework(studentA);
}
}