迪米特法则
基本介绍
- 一个对象应该对其他对象保持最少的了解
- 类与类关系越密切,耦合度越大
迪米特法则( Demeter Principle) 又叫 最少知道原则,即一个类对自己依赖的类知道越少越好.也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部.对外除了提供的public方法,不对外泄露任何信息.
迪米特法则还有更简单的定义: 只与直接的朋友通信
直接的朋友: 每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系.耦合的方式很多,依赖,关联,组合,聚合等.其中,我们称出现成员变量,方法参数,方法返回值中的类为直接的朋友,而出现在局部变量中的类不是直接的朋友.也就是说,陌生的类最好不要以局部变量的形式出现在类的内部.
单一职责 接口隔离 依赖倒置 里氏替换 开闭原则 迪米特法则
直接朋友: A中有B, 比如A接收参数列表中有B的实例对象,或者是A的返回值列表中存在B的实例对象,但是都是要是对完有B的影子,A和B才是直接朋友
倘若,A里面有个私有方法C,然后C,new到了B,这个就不算A与B为直接朋友
所以,这个迪米特法则就是说,这个陌生的类,就怎么说,就陌生的类最好不要以这个局部变量的形式存在在其他类的内部哦
应用实例
有一个学校,下属有各个学院和总部,现要求打印出学校总部员工ID和学院员工的ID
编程实现上面的功能,看代码演示
学院员工id = 0
- 学院员工id = 1
- 学院员工id = 2
- 学院员工id = 3
- 学院员工id = 4
- 学院员工id = 5
- 学院员工id = 6
- 学院员工id = 7
- 学院员工id = 8
- 学院员工id = 9
--- 学校总部员工 ---
- 学校总部员工id = 0
- 学校总部员工id = 1
- 学校总部员工id = 2
- 学校总部员工id = 3
- 学校总部员工id = 4
--
应用实例改进
- 前面设计的问题在于SchoolManager中,CollegeEmployee类并不是SchoolManager类的直接朋友(分析)
按照迪米特法则,应该避免类中出现这样非直接朋友关系的耦合
对代码按照迪米特法则进行改进
迪米特法则注意事项和细节
迪米特法则的核心是降低类之间的耦合
但是注意: 由于每个类都减少了不必要的依赖,因此迪米特法则只是要降低类间(对象间)耦合关系,并不是要求完全没有依赖关系.
最少知道原则