设计原则 迪米特法则

概念

  • 定义:一个对象应该对其他对象保持最少的了解,又叫最少知道原则
  • 核心观念:类之间的解耦,尽量降低类与类之间的耦合
  • 优点:降低类之间的耦合
  • 强调:只和朋友(出现在成员变量、方法的输入、输出参数中的类成为成员朋友类,而出现在方法体内部的类不属于朋友类)交流,不和陌生人说话

编码

实例

  • 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 -
- 个人学习笔记 -

以上为本篇文章的主要内容,希望大家多提意见,如果喜欢记得点个推荐哦
作者:Maggieq8324
本文版权归作者和博客园共有,欢迎转载,转载时保留原作者和文章地址即可。
原文地址:https://www.cnblogs.com/maggieq8324/p/15655079.html