迪米特法则

迪米特法则

定义

一个对象应该对其他对象保持最少的了解,又叫最少知道原则

尽量降低类与类之间的耦合

优点

降低类之间的耦合

强调

只和朋友交流,不和陌生人说话

 

朋友

出现在成员变量、方法的输入、输出参数中的类称为成员朋友类,而出现在方法体内部的类是不属于朋友类的

 实例

假如有一家教育机构,有Boss、TeamLeader、Course三个类

这个Boss让TeamLeader进来汇报一下当前上线了多少课程

   课程

public class Course {
}

技术总监
public class TeamLeader {
public void checkCourseNumberOfCourses(List<Course> courseList){
System.out.println("在线课程的数量是:" + courseList.size());
}
}

老板
public class Boss {
public void commandCheckNumber(TeamLeader teamLeader){
List<Course> courseList = new ArrayList<Course>();
for (int i = 0 ; i < 20 ; i++){
courseList.add(new Course());
}
teamLeader.checkCourseNumberOfCourses(courseList);
}
}

Test
public class Test {
public static void main(String[] args) {
Boss boss = new Boss();
TeamLeader teamLeader = new TeamLeader();
boss.commandCheckNumber(teamLeader);
}
}

输出:在线课程的数量是:20

存在的问题

TeamLeader作为入参它是Boss直接的朋友,Course类在Boss方法体内部,不是Boss的朋友,但是Course是TeamLeader的朋友,所以将Course直接传给TeamLeader

Course不是Boss的朋友但是我们也需要将它导入进来,这就违背了迪米特法则

改进

Boss类

public class Boss {
public void commandCheckNumber(TeamLeader teamLeader){
teamLeader.checkCourseNumberOfCourses();
}
}
TeamLeader
public class TeamLeader {
public void checkCourseNumberOfCourses(){
List<Course> courseList = new ArrayList<Course>();
for (int i = 0 ; i < 20 ; i++){
courseList.add(new Course());
}
System.out.println("在线课程的数量是:" + courseList.size());
}
}

这样在高层就遵循了迪米特法则,减小了类之间的耦合

UML

 

 



 

posted @ 2020-03-25 21:13  叫熊猫啊  阅读(250)  评论(0编辑  收藏  举报