深入浅出设计模式——迪米特法则

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.总结

迪米特法则是为了降低类之间的耦合而设计的,由于每个类都减少了依赖,所以确实可以降低耦合关系。但是凡事有度,虽然减少了直接联系,但是却拥有间接联系,使用这个法则会产生大量的间接关系,所以使用这个原则的时候,要反复权衡,做到结构清晰,又要高内聚低耦合。

以上是关于深入浅出设计模式——迪米特法则的主要内容,如果未能解决你的问题,请参考以下文章

设计原则之迪米特法则的概念及实例代码操作

设计模式之美——DRY原则 和 迪米特法则

设计模式之美——DRY原则 和 迪米特法则

设计模式六大原则:迪米特法则

10设计模式六大原则——迪米特法则

面向对象设计原则 迪米特法则(Law of Demeter)