00_5面向对象设计原则-迪米特法则
迪米特法则又叫最少知道原则,指一个对象应该对其他对象保持最少的了解,尽量降低类与类之间的耦合。迪米特法则主要强调只和朋友交流,不和陌生人说话。出现在成员变量、方法的输入和输出参数中的类都可以被称为成员朋友类,而出现在方法体内部的类不属于朋友类。
我们来给简单设计一个权限系统,TeamLeader需要查看目前发布到线上的课程数量。这时候,TeamLeader要让Employee去进行统计,Employee在把统计结果告诉TeamLeader,下面我们来看一下实现代码:
Course.java
package org.test.design.principle.lod; public class Course { }
Employee.java
package org.test.design.principle.lod; import java.util.List; public class Employee { public void checkNumberOfCourses(List<Course> courseList) { System.out.println("目前已发布的课程数量是:" + courseList.size()); } }
TeamLeader.java
package org.test.design.principle.lod; import java.util.ArrayList; import java.util.List; 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.checkNumberOfCourses(courseList); } //测试调佣 public static void main(String[] args) { TeamLeader teamLeader = new TeamLeader(); Employee employee = new Employee(); teamLeader.commandCheckNumber(employee); } }
写到这里,功能已经实现了,我们根据迪米特法则来分析一下,TeamLeader只想要结果,不需要跟Course产生直接的交流。而Employee统计需要引用Course对象,TeamLeader和Course并不是朋友。下面我们重构一下代码:
EmployeeV2.java
import java.util.ArrayList; import java.util.List; public class EmployeeV2 { public void checkNumberOfCourses(){ List<Course> courseList=new ArrayList<>(); for (int i = 0; i < 20; i++) { courseList.add(new Course()); } System.out.println("目前已发布的课程数量是:"+courseList.size()); } }
TeamLeaderV2.java
package org.test.design.principle.lod; public class TeamLeaderV2 { public void commandCheckNumber(EmployeeV2 employee) { employee.checkNumberOfCourses(); } }
此篇完