设计原则 - 迪米特法则
概念
- 迪米特法则(Law of Demeter, LoD):一个软件实体应当尽可能少地与其他实体发生相互作用。
- 核心观念:类之间的解耦,尽量降低类与类之间的耦合。
- 优点:降低类之间的耦合。
- 强调:只和朋友(出现在成员变量、方法的输入、输出参数中的类成为成员朋友类,而出现在方法体内部的类不属于朋友类)交流,不和陌生人说话。
编码
实例
Boss
给Leader
下达获取课程数的指令Boss.java
/**
* @Description Boss
* @date Dec 7, 2021
* @version 1.0
*/
public class Boss {
/**
* 课程数量指令
* @param teamLeader
*/
public void commandCheckNumber(TeamLeader teamLeader) {
List<Course> courseList = new ArrayList<>();
for (int i = 0; i < 20; i++) {
courseList.add(new Course());
}
teamLeader.checkNumberOfCourses(courseList);
}
}
TeamLeader.java
/**
* @Description 项目经理
* @date Dec 7, 2021
* @version 1.0
*/
public class TeamLeader {
/**
* 课程数量
* @param courseList
*/
public void checkNumberOfCourses(List<Course> courseList) {
System.out.println("在线课程的数量是:" + courseList.size());
}
}
Course.java
/**
* @Description 课程
* @date Dec 7, 2021
* @version 1.0
*/
public class Course {
}
Test.java
/**
* @Description测试类
* @date Dec 7, 2021
* @version 1.0
*/
public class Test {
public static void main(String[] args) {
// TODO 向Leader发送指令获取课程数
Boss boss = new Boss();
TeamLeader teamLeader = new TeamLeader();
boss.commandCheckNumber(teamLeader);
}
}
- 输出:
在线课程的数量是:20
- 类图如下:
- 上述
Boss
给Leader
下达获取课程数指令代码中根据迪米特法则可以看出,Course
与Boss
并不属于朋友,Boss
给Leader
下指令就可以,并不需要关心Course
类
迪米特法则实现
Boss.java
/**
* @Description Boss
* @date Dec 7, 2021
* @version 1.0
*/
public class Boss {
/**
* 课程数量指令
* @param teamLeader
*/
public void commandCheckNumber(TeamLeader teamLeader) {
teamLeader.checkNumberOfCourses();
}
}
TeamLeader.java
/**
* @Description 项目经理
* @date Dec 7, 2021
* @version 1.0
*/
public class TeamLeader {
/**
* 课程数量
* @param courseList
*/
public void checkNumberOfCourses() {
List<Course> courseList = new ArrayList<>();
for (int i = 0; i < 20; i++) {
courseList.add(new Course());
}
System.out.println("在线课程的数量是:" + courseList.size());
}
}
- 类图变化如下:
- 在应用迪米特法则时,一个对象只能与直接朋友发生交互,不要与"陌生人"发生直接交互,这样做可以降低系统的耦合度,一个对象的改变不会给太多其它对象带来影响
源码
GitHub
:https://github.com/Maggieq8324/design_pattern.git