diff --git a/src/main/java/top/fjy8018/designpattern/principle/demeter/Boss.java b/src/main/java/top/fjy8018/designpattern/principle/demeter/Boss.java new file mode 100644 index 0000000..736dca0 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/principle/demeter/Boss.java @@ -0,0 +1,29 @@ +package top.fjy8018.designpattern.principle.demeter; + +import lombok.extern.slf4j.Slf4j; + +import java.util.List; + +/** + * 迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP), + * 就是说一个对象应当对其他对象有尽可能少的了解 + * 和朋友交流,不和陌生人说话 + * 朋友指的是出现在类成员变量、方法参数、返回值的对象 + * + * @author F嘉阳 + * @date 2018-09-22 17:02 + */ +@Slf4j +public class Boss { + + /** + * 此处朋友为{@link TeamLeader},{@link DCourse}不是类成员变量、方法参数、返回值的对象,所以不应该在类内引用 + * 即当前类知道的应该尽可能少 + * + * @param teamLeader + */ + public void commandCheckNumber(TeamLeader teamLeader) { + List courses = teamLeader.checkNumberOfCourses(); + log.info("课程的数量是:{}", courses.size()); + } +} diff --git a/src/main/java/top/fjy8018/designpattern/principle/demeter/DCourse.java b/src/main/java/top/fjy8018/designpattern/principle/demeter/DCourse.java new file mode 100644 index 0000000..9be2edb --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/principle/demeter/DCourse.java @@ -0,0 +1,8 @@ +package top.fjy8018.designpattern.principle.demeter; + +/** + * @author F嘉阳 + * @date 2018-09-22 17:04 + */ +public class DCourse { +} diff --git a/src/main/java/top/fjy8018/designpattern/principle/demeter/TeamLeader.java b/src/main/java/top/fjy8018/designpattern/principle/demeter/TeamLeader.java new file mode 100644 index 0000000..97cc13f --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/principle/demeter/TeamLeader.java @@ -0,0 +1,24 @@ +package top.fjy8018.designpattern.principle.demeter; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author F嘉阳 + * @date 2018-09-22 17:04 + */ +public class TeamLeader { + + /** + * {@link DCourse}作为方法返回值,属于“朋友” + * + * @return + */ + public List checkNumberOfCourses() { + List courseList = new ArrayList(); + for (int i = 0; i < 20; i++) { + courseList.add(new DCourse()); + } + return courseList; + } +} diff --git a/src/test/java/top/fjy8018/designpattern/principle/demeter/BossTest.java b/src/test/java/top/fjy8018/designpattern/principle/demeter/BossTest.java new file mode 100644 index 0000000..73d841e --- /dev/null +++ b/src/test/java/top/fjy8018/designpattern/principle/demeter/BossTest.java @@ -0,0 +1,14 @@ +package top.fjy8018.designpattern.principle.demeter; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class BossTest { + + @Test + void commandCheckNumber() { + Boss boss = new Boss(); + boss.commandCheckNumber(new TeamLeader()); + } +} \ No newline at end of file