Java设计模式-七大架构设计原则-最少知道原则(迪米特法则)
从这一专栏开始将学习设计模式,上课学习和自己总结归纳的笔记将总结出来供大家参考。
参考书籍:《设计模式就该这样学》
其他文章:
最少知道原则(迪米特法则)
最少知道原则(Least Knowledge Principle,LKP),指的是一个对象应该对其他对象保持最少了解,尽量降低类和类之间的耦合。主要强调的是只和朋友交流,不和陌生人说话。
朋友类:出现在成员变量、方法的输入输出参数中的类
非朋友类:而出现在方法体内部的类。
1.1最少知道原则的实际应用
问题背景:
现在要设计一个权限系统,TeamLeader需要查看目前发布到线上课程的数量,
但是TeamLeader不亲自统计,而是叫Employee去统计,然后让Employee把统计的结果告诉给TeamLeader。
Course类
public class Course {
public static void main(String[] args) {
TeamLeader teamLeader=new TeamLeader();
Employee employee = new Employee();
teamLeader.commandCheckNumber(employee);
}
}
1.1.1没使用最少知道原则
Employee类
public class Employee {
public void checkNumberOfCourse(List<Course> courseList){
System.out.println("已发布的课程数量为:"+courseList.size());
}
}
TeamLeader类
public class TeamLeader {
public void commandCheckNumber(Employee employee){
List<Course> courseList = new ArrayList<>();
for(int i=0;i<20;i++){
courseList.add(new Course());
}
employee.checkNumberOfCourse(courseList);
}
}
说明:
结果如下:

类图如下:

其实在这里代码功能已经实现,但是根据最少知道原则和类图来看:
TeamLeader只想要结果,不想跟Course类(非朋友类)产生直接交流。
Employee统计需要引用Course对象,TeamLeader和Course并不是朋友
1.1.2使用了最少知道原则
Employee类
public class Employee {
public void checkNumberOfCourse(){
List<Course> courseList=new ArrayList();
for(int i=0;i<20;i++){
courseList.add(new Course());
}
System.out.println("已发布的课程数量为:"+courseList.size());
}
}
TeamLeader类
public class TeamLeader {
public void commandCheckNumber(Employee employee) {
employee.checkNumberOfCourse();
}
}
说明:
结果如下:

类图如下:

上图所示Course和TeamLeader已经没了关联了。
版权声明:本文为qq_29843575原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。