迪米特原则又叫 迪米特法则/最少知道原则。现在我们给出迪米特原则的定义:一个对象应该对其他对象保持最少的了解。它的优点是降低了类之间的耦合。它强调只和朋友交流,不和陌生人说话。其中朋友是指出现在成员变量、方法的输入、输出参数中的类称为成员朋友类,而出现在方法体内部的类不属于朋友类。
下面我们通过代码,更好的解释迪米特原则。
比如我是一个公司的老板,我开了一家网上课程网站,我让我的TeamLeader帮我统计一下,目前该公司在线课程有多少个?怎么办呢,转化为代码如下:
package com.zybank.design.principle.demeter;
import java.util.ArrayList;
import java.util.List;
public class Boss {
public void commandCheckNumber(TeamLeader teamLeader){
List<Course> list = new ArrayList<Course>();
for (int i =0;i<200;i++){
list.add(new Course());
}
teamLeader.checkNumberOfCourses(list);
}
}
package com.zybank.design.principle.demeter;
import java.util.List;
public class TeamLeader {
public void checkNumberOfCourses(List list){
System.out.println("总有课程"+list.size());
}
}
package com.zybank.design.principle.demeter;
public class Course {
}
在写一个测试类:
package com.zybank.design.principle.demeter;
public class Test {
public static void main(String[] args){
Boss boss = new Boss();
TeamLeader teamLeader = new TeamLeader();
boss.commandCheckNumber(teamLeader);
}
}
大家感觉上述代码怎么样?有没有什么问题?当然有问题了,这样写的代码就是违背了我们现在讲述的迪米特原则。Course这个类就不应该出现在Boss类里。老板让TeamLeader去查一下课程的数量,其他的他并不想关心。所以我们的代码可以做进一步的优化。
package com.zybank.design.principle.demeter;
public class Boss {
public void commandCheckNumber(TeamLeader teamLeader){
teamLeader.checkNumberOfCourses();
}
}
package com.zybank.design.principle.demeter;
import java.util.ArrayList;
import java.util.List;
public class TeamLeader {
public void checkNumberOfCourses(){
List<Course> list = new ArrayList<>();
for (int i =0;i<200;i++){
list.add(new Course());
}
System.out.println("总有课程"+list.size());
}
}
package com.zybank.design.principle.demeter;
public class Course {
}
而我们的测试类是不用改变的:
package com.zybank.design.principle.demeter;
public class Test {
public static void main(String[] args){
Boss boss = new Boss();
TeamLeader teamLeader = new TeamLeader();
boss.commandCheckNumber(teamLeader);
}
}
经过上述代码的优化,相信我们对迪米特原则有了一个很清楚的认识。那我们在实际的开发中用起来吧。