例子
假设老板给项目组长下达一个任务,让其去查询课程的数量
代码
public class Course {}
public class TeamLeader {public void checkNumberOfCourses(List<Course> courseList) {System.out.println("课程的数量为:" + courseList.size());}}
public class Boss {public void commandCheckNumber(TeamLeader teamLeader) {List<Course> courseList = new ArrayList<Course>();for (int i = 0; i < 20; i++) {courseList.add(new Course());}teamLeader.checkNumberOfCourses(courseList);}}
测试
public class Test {public static void main(String[] args) {Boss boss = new Boss();TeamLeader teamLeader = new TeamLeader();mandCheckNumber(teamLeader);}}
这部分代码是不符合迪米特原则的,在Boss
类中,成员变量,方法的返回值,形参均为“朋友”,而方法内部的局部变量不是朋友,迪米特原则就是强调只和朋友说话,不和陌生人说话,在上述代码中Boss
应该只需要项目组长TeamLeader
汇报给他一个结果就行了,中间有关于Course
的部分不需要知道,修改之后的代码如下:
其他类均不变,只改变Boss
类和TeamLeader
类
public class TeamLeader {public void checkNumberOfCourses() {List<Course> courseList = new ArrayList<Course>();for (int i = 0; i < 20; i++) {courseList.add(new Course());}System.out.println("课程的数量为:" + courseList.size());}}
public class Boss {public void commandCheckNumber(TeamLeader teamLeader) {teamLeader.checkNumberOfCourses();}}