知识卡片
朋友类的判断标准与方法体内部依赖的隐患
内容
应用[[迪米特法则的定义]]时,”朋友类”特指出现在成员变量、方法参数中的类;只在方法体内部 临时用到的类不算朋友,与它依赖就违反法则。老师类的commond方法只接收GroupLeader参数, 却在方法体内部自行创建List(Girl)集合——这种”方法自己引入陌生类”的耦合比参数耦合更隐蔽。 修复是把该集合初始化移到调用方传入。发散:耦合审查要看方法体内部实际引用了什么。
参考来源
- 位置:《设计模式之禅(第2版)》第5章《迪米特法则》(源文件:_epub-src/text/part0020.html)
- 结论依据:原文明确"出现在成员变量、方法的输入输出参数中的类称为成员朋友类,而出现在方法体内部的类不属于朋友类",并以Teacher类的commond方法内部创建List<Girl>为例,指出这严重违反了迪米特法则。
- 原始内容:朋友类的定义是这样的:出现在成员变量、方法的输入输出参数中的类称为成员朋友类,而出现在方法体内部的类不属于朋友类……方法是类的一个行为,类竟然不知道自己的行为与其他类产生依赖关系,这是不允许的,严重违反了迪米特法则。