定義
迪公尺特法則(law of demeter,lod)也稱為最少知識原則(least knowledge principle,lkp)。
乙個物件應該對其他物件有最少的了解。通俗地講,乙個類應該對自己需要耦合或呼叫的類知道得最少,它的內部是如何複雜都和自己沒關係,只需知道它提供的public方法,其他的一概不關心。
廣義的迪公尺特法則:
乙個模組設計的好壞的乙個重要標誌就是該模組在多大程度上講自己的內部資料與實現的有關細節隱藏起來。
乙個軟體實體應當盡可能少的與其他實體發生相互作用。
每乙個軟體單位對其他的單位都只有最少的知識,而且侷限於那些與本單位密切相關的軟體單位。
目的
在於降低類與類之間的耦合。由於每個類儘量減少對其他類的依賴,因此,很容易使得系統的功能模組功能獨立,是的相互間存在盡可能少的依賴關係。
優點
迪公尺特法則的做法觀念就是類間解耦,弱耦合,只有弱耦合了以後,類的復用率才可以提高。
缺點
造成系統的不同模組之間的通訊效率降低,使系統的不同模組之間不容易協調等缺點。
因為迪公尺特法則要求類與類之間盡量不直接通訊,如果類之間需要通訊就通過第三方**的方式,這就直接導致了系統中存在大量的中介類,大大增加了系統的複雜度。
解決這個問題的方式是:使用依賴倒轉原則(通俗的講就是要針對介面程式設計,不要針對具體程式設計), 這要就可以是呼叫方和被呼叫方之間有了乙個抽象層,被呼叫方在遵循抽象層的前提下就可以自由的變化,此時抽象層成了呼叫方的朋友。
注意事項
第一:在類的劃分上,應當建立弱耦合的類,類與類之間的耦合越弱,就越有利於實現可復用的目標。
第二:在類的結構設計上,每個類都應該降低成員的訪問許可權。
第三:在類的設計上,只要有可能,乙個類應當設計成不變的類。
第四:在對其他類的引用上,乙個物件對其他類的物件的引用應該降到最低。
第五:盡量限制區域性變數的有效範圍,降低類的訪問許可權。
簡單示例:
上課時,教師讓學習委員進行點名
namespacedesignprinciples.lowofdemeter
}public
class
teacher
group.count(students);
}public
void
commandbydemeter(groupleader group)
}public
class
groupleader
public
void
countbydemeter()
console.writeline(
"學生人數(迪公尺特):
" +students.count);}}
public
class
student
}}
參考:歡迎閱讀本系列文章:head first設計模式之目錄
設計模式七大原則之迪公尺特法則
簡介 迪公尺特法則又叫 最少知道原則 即乙個類對自己依賴的類知道的越少越好 使他們之間有最低耦合度 對於依賴的類不管多複雜,都盡量把邏輯封裝在類內部,對外出了提供public方法,不洩露任何的資訊,最簡單的說就是 只與直接的朋友通訊 每個物件都會與其他的物件之間產生耦合關係,只要兩個物件之間存在耦合...
七大設計原則 五 迪公尺特原則
定義乙個物件應該對其他物件保持最少的了解,又叫最少知道原則。盡量降低類與類之間的耦合。優點降低類之間的耦合。強調只和朋友交流,不和陌生人說話。朋友 出現在成員變數 方法的輸入,輸出引數中的類稱為成員朋友類,而出現在方法體內部的類不屬於朋友類。實現public class public void ca...
設計模式 七大原則 迪公尺特法則
demeterprinciple 1.乙個物件應該對其他物件保持最少的了解 2.類與類關係越密切,耦合度越大 3.迪公尺特法則demeterprinciple又叫最少知道原則,即乙個類對自己依賴的類知道的越少越好 也就是說,對於被依賴的類不管多麼複雜,都盡量將邏輯封裝在類的內部 對外除了提供的pub...