声明:本文为阅读秦小波所写的《设计模式之禅》所写小结,文章内容可能有部分引述此书。
迪米特法则(Law of Demeter)——最少知识原则(Least knowledge Principle)
1、定义:
一个对象应该对其他对象有最少的了解;一个类应该对自己需要耦合或调用的类知道最少。
迪米特法则有以下四层含义:
1) 只和直接的朋友交流: 直接朋友也要处理好自己的依赖关系,不要将其引入到第三方;
朋友类:出现在成员、方法的输入输出参数中的类(不是出现在方法内部的类);
除了以上位置的类,不要再对其他类产生依赖(JDK的API除外),这样可以提高健壮性,降低耦合。
注意:不要出现一直getA().getB().getC()……,除非其返回值均相同。
2) 朋友间也是有距离的:对朋友的依赖也要尽可能少;
一个类应减少public的属性或方法,这样可以降低修改时涉及面的程度,也减少了变量引起的风险扩散。
3) 是自己的就是自己的;
如果一个方法放在本类中,既不增加类间关系,也对本类不产生负面影响,那就放在本类中。
4) 谨慎使用Serializable:网络传输时要注意。
RMI(Remote Method Invocation,远程方法调用)时,传递一个VO(Value Object,值对象),这个对象就必须实现Serializable接 口(网络传输对象序列化);当这个VO发生属性访问权限变更,客户端和服务器未同步时,则会发生序列化失败。
小结:迪米特法则核心就是类间解耦,但低耦合有可能造成高复杂度,只要类间跳转不超过两次都是可以的,具体问题具体分析。