迪米特法則,又稱為「最少知識原則」,其核心思想是:一個對象應當對其他對象保持最少的了解。簡單來說,一個類應該盡量減少與其他類之間的耦合,只與「直接朋友」通訊,避免與「陌生類」打交道。
在軟體開發中,類與類之間的關係越密切,耦合度越高。當一個類發生變化時,會對關聯的類產生連鎖反應,導致系統脆弱、難以維護。迪米特法則旨在通過降低類之間的耦合,提高代碼的複用率和系統的穩定性。這貫徹了軟體設計的核心原則:低耦合,高內聚。
耦合關係包括依賴、關聯、組合、聚合等。迪米特法則劃定界限:
原則要求:陌生類最好不要以局部變量的形式出現在類的內部。
假設老師想查看班級學生的分數,直接穿透調用:
public class Teacher {
public void teach(Classes classes) {
// 違反迪米特法則:Teacher 與 Student、Score 都是陌生類
classes.getStudents().getScore().show();
}
}
問題分析:
將查詢邏輯封裝在 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()),增加系統複雜度。迪米特法則在設計模式中常見於:
在應用時需反覆權衡:既要結構清晰、低耦合,又要避免過度封裝導致系統膨脹。原則不是教條,關鍵在於「高內聚、低耦合」的平衡點。