深入浅出设计模式——迪米特法则
Posted 苏凌峰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入浅出设计模式——迪米特法则相关的知识,希望对你有一定的参考价值。
1.迪米特原则介绍
2.用代码演示里迪米特原则
3.总结
1.迪米特原则介绍
定义:
1)一个对象应该对其他对象保持最少的了解。
换句话来说,迪米特原则的特点就是:和直接朋友通信。
直接朋友:每个对象都会和其它对象有耦合关系,只要有耦合关系,我们就说这两个对象之间是朋友关系。其中,我们称出现成员变量、方法参数、方法返回值中的类为直接的朋友,而出现在局部变量中的类则不是直接的朋友。也就是说,陌生的类最好不要作为局部变量的形式出现在类的内部。
问题描述:假设我们有一个学生管理系统,教师要去查询他的所有学生的成绩列表。 这是就需要两个操作:
1)先去查所有学生
2)再去查学生对应的成绩
此时查成绩这个操作应该放在学生列表里面查询直接返回,而不是教师的service先查学生,再去查分数,因为分数不是教师service的直接朋友。
解决方法:
把查询分数放在学生service里进行
2.用代码演示依赖倒转原则
修改前,我们在TeacherService里查询学生和分数:
public List<StudengScope> queryScope(){
List<Student> students = studentService.queryStudentByTeacher(UserUtil.getCurrent().getId());
List<StudengScope> res = scoperService.queryScopeByStudents(students);
return res;
}
修改后,我们在TeacherService里查询学生,在StudentService里查询分数:
public List<StudengScope> queryScope(){
List<StudengScope> students = studentService.queryStudentByTeacher(UserUtil.getCurrent().getId());
return students;
}
public List<StudengScope> queryStudentByTeacher(){
List<Student> students = studentService.queryStudentByTeacher(UserUtil.getCurrent().getId());
List<StudengScope> res = this.queryScopeByStudents(students);
return res;
}
3.总结
迪米特法则是为了降低类之间的耦合而设计的,由于每个类都减少了依赖,所以确实可以降低耦合关系。但是凡事有度,虽然减少了直接联系,但是却拥有间接联系,使用这个法则会产生大量的间接关系,所以使用这个原则的时候,要反复权衡,做到结构清晰,又要高内聚低耦合。
以上是关于深入浅出设计模式——迪米特法则的主要内容,如果未能解决你的问题,请参考以下文章