設計原則 - 迪米特法則

概念

  • 定義:一個對象應該對其他對象保持最少的瞭解,又叫最少知道原則
  • 核心觀念:類之間的解耦,儘量降低類與類之間的耦合
  • 優點:降低類之間的耦合
  • 強調:只和朋友(出現在成員變量、方法的輸入、輸出參數中的類成爲成員朋友類,而出現在方法體內部的類不屬於朋友類)交流,不和陌生人說話

編碼

實例

  • 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 -
白嫖有風險
點贊加收藏
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章