迪米特法则: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