迪米特法则:LoD
也被称为最少知识原则
定义:一个对象应该对其他对象有最少的了解。
通俗的说就是一个类应该对自己需要耦合或调用的类知道的最少,类内部如何复杂跟我们没有关系
我们所要了解的只是类对外提供的public方法。
迪米特法则对类的低耦合性提出明确的要求,包含4个含义:
1.只和朋友交流
一个例子:老师让体委点一下女生的数量。
class Teacher { public void commond(GroupLeader groupLeader) { List<Girls> girls = new ArrayList<>(); for (int i = 0; i < 20; i++) { girls.add(new Girls()); } groupLeader.countGirls(girls); } } class GroupLeader { public void countGirls(List<Girls> girls) { System.out.println("女生的数量是:--->" + girls.size()); } } class Girls { } public class Client { public static void main(String[] args) { Teacher teacher = new Teacher(); teacher.commond(new GroupLeader()); } }
每个对象与必然会与其他对象有耦合关系,两个对象之间的耦合就成为朋友关系,应该只与朋友类进行交流。
那么什么是朋友类呢?出现在成员变量、方法的输入输出参数的类成为朋友类,出现在方法体内部的类不是朋友类。
上面的代码中,Teacher类的朋友类是GroupLeader类,但是commond方法体中竟然出现了Girls类,显然违反了迪米特法则。
修改一下:
class Teacher { public void commond(GroupLeader groupLeader) { groupLeader.countGirls(); } } class GroupLeader { List<Girls> girls = new ArrayList<>(); public GroupLeader(List<Girls> girls) { this.girls = girls; } public void countGirls() { System.out.println("女生的数量是:--->" + girls.size()); } } class Girls { } public class Client { public static void main(String[] args) { List<Girls> girls = new ArrayList<>(); for (int i = 0; i < 20;i++){ girls.add(new Girls()); } Teacher teacher = new Teacher(); teacher.commond(new GroupLeader(girls)); } }
这样就实现了只与朋友类进行交流。
2.朋友间也是有距离的
什么意思呢?
再好的朋友之间也是有秘密可言的。
就是说一个类中的方法不能全部暴露出去,尽可能减少public的属性和方法,public的属性或方法越多,这个类就越不安全,
修改所涉及的面越大。
3.是自己的就是自己的
如果一个方法放在本类中和放在别的类中都行,那么就放在本类中。
4.谨慎使用Serializable
不懂啥意思。。。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/u013476556/article/details/47018049