设计原则 - 迪米特法则

概念

  • 迪米特法则(Law of Demeter, LoD):一个软件实体应当尽可能少地与其他实体发生相互作用。
  • 核心观念:类之间的解耦,尽量降低类与类之间的耦合。
  • 优点:降低类之间的耦合。
  • 强调:只和朋友(出现在成员变量、方法的输入、输出参数中的类成为成员朋友类,而出现在方法体内部的类不属于朋友类)交流,不和陌生人说话。

编码

实例

  • BossLeader下达获取课程数的指令
  • 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
  • 类图如下:

在这里插入图片描述

  • 上述BossLeader下达获取课程数指令代码中根据迪米特法则可以看出,CourseBoss并不属于朋友,BossLeader下指令就可以,并不需要关心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());
    }

}
  • 类图变化如下:

在这里插入图片描述

  • 在应用迪米特法则时,一个对象只能与直接朋友发生交互,不要与"陌生人"发生直接交互,这样做可以降低系统的耦合度,一个对象的改变不会给太多其它对象带来影响

源码

GitHubhttps://github.com/Maggieq8324/design_pattern.git


- End -
- 个人学习笔记 -
- 仅供参考 -

posted @ 2021-12-07 11:12  Maggieq8324  阅读(24)  评论(0编辑  收藏  举报