乐趣区

关于java:深入浅出设计模式迪米特法则

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

迪米特法令是为了升高类之间的耦合而设计的,因为每个类都缩小了依赖,所以的确能够升高耦合关系。然而凡事有度,尽管缩小了间接分割,然而却领有间接分割,应用这个法令会产生大量的间接关系,所以应用这个准则的时候,要重复衡量,做到构造清晰,又要高内聚低耦合。

退出移动版