首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

深入理解 Java 設計模式中的迪米特法則

     編輯:Java 相關知識

什麼是迪米特法則?

迪米特法則,又稱為「最少知識原則」,其核心思想是:一個對象應當對其他對象保持最少的了解。簡單來說,一個類應該盡量減少與其他類之間的耦合,只與「直接朋友」通訊,避免與「陌生類」打交道。

為什麼需要迪米特法則?

在軟體開發中,類與類之間的關係越密切,耦合度越高。當一個類發生變化時,會對關聯的類產生連鎖反應,導致系統脆弱、難以維護。迪米特法則旨在通過降低類之間的耦合,提高代碼的複用率和系統的穩定性。這貫徹了軟體設計的核心原則:低耦合,高內聚。

核心概念:誰是「直接朋友」?

耦合關係包括依賴、關聯、組合、聚合等。迪米特法則劃定界限:

  • 直接朋友:出現在成員變量、方法參數、方法返回值中的類。
  • 陌生類:出現在局部變量中的類。

原則要求:陌生類最好不要以局部變量的形式出現在類的內部。

違反原則的反面教材

假設老師想查看班級學生的分數,直接穿透調用:

public class Teacher {
    public void teach(Classes classes) {
        // 違反迪米特法則:Teacher 與 Student、Score 都是陌生類
        classes.getStudents().getScore().show();
    }
}

問題分析:

  1. 耦合度極高,Teacher 依賴 Classes、Student、Score 多個類。
  2. Student 類若移除 Score,或 Score 類修改 show() 方法,Teacher 都需修改。
  3. Teacher 對非直接朋友(Student、Score)知道太多細節。

遵循原則的重構方案

將查詢邏輯封裝在 Classes 和 Student 內部,Teacher 僅與直接朋友 Classes 通訊:

public class Teacher {
    public void teach(Classes classes) {
        classes.showScore(); // 只與直接朋友通訊
    }
}

public class Classes {
    public void showScore() {
        // 內部處理學生分數邏輯
        for (Student student : students) {
            student.showScore();
        }
    }
}

public class Student {
    private Score score;
    public void showScore() {
        score.show(); // Student 是 Score 的直接朋友
    }
}

優缺點總結

優點

  • 降低類之間的耦合,增強模組獨立性。
  • 提高類的複用率和系統可維護性。

缺點

  • 可能產生大量細粒度的包裝方法(如上例中的 showScore()),增加系統複雜度。
  • 過度使用會導致通訊效率下降,引入過多「中介者」類。

實戰應用場景

迪米特法則在設計模式中常見於:

  • 外觀模式:為子系統提供統一入口,隱藏內部複雜性。
  • 中介者模式:封裝對象間交互,將網狀結構轉為星型結構。

最佳實踐建議

在應用時需反覆權衡:既要結構清晰、低耦合,又要避免過度封裝導致系統膨脹。原則不是教條,關鍵在於「高內聚、低耦合」的平衡點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved