迪公尺特法則來自於2023年美國東北大學(northeastern university)乙個名為「demeter」的研究專案。迪公尺特法則又稱為最少知識原則(leastknowledge principle, lkp),其定義如下:
迪公尺特法則(law of demeter, lod):乙個軟體實體應當盡可能少地與其他實體發生相互作用。
如果乙個系統符合迪公尺特法則,那麼當其中某乙個模組發生修改時,就會盡量少地影響其他模組,擴充套件會相對容易,這是對軟體實體之間通訊的限制,迪公尺特法則要求限制軟體實體之間通訊的寬度和深度。迪公尺特法則可降低系統的耦合度,使類與類之間保持鬆散的耦合關係。
迪公尺特法則還有幾種定義形式,包括:不要和「陌生人」說話、只與你的直接朋友通訊等,在迪公尺特法則中,對於乙個物件,其朋友包括以下幾類:
(1) 當前物件本身(this);
(2) 以引數形式傳入到當前物件方法中的物件;
(3) 當前物件的成員物件;
(4) 如果當前物件的成員物件是乙個集合,那麼集合中的元素也都是朋友;
(5) 當前物件所建立的物件。
任何乙個物件,如果滿足上面的條件之一,就是當前物件的「朋友」,否則就是「陌生人」。在應用迪公尺特法則時,乙個物件只能與直接朋友發生互動,不要與「陌生人」發生直接互動,這樣做可以降低系統的耦合度,乙個物件的改變不會給太多其他物件帶來影響。
迪公尺特法則要求我們在設計系統時,應該儘量減少物件之間的互動,如果兩個物件之間不必彼此直接通訊,那麼這兩個物件就不應當發生任何直接的相互作用,如果其中的乙個物件需要呼叫另乙個物件的某乙個方法的話,可以通過第三者**這個呼叫。簡言之,就是通過引入乙個合理的第三者來降低現有物件之間的耦合度。
在將迪公尺特法則運用到系統設計中時,要注意下面的幾點:在類的劃分上,應當盡量建立松耦合的類,類之間的耦合度越低,就越有利於復用,乙個處在松耦合中的類一旦被修改,不會對關聯的類造成太大波及;在類的結構設計上,每乙個類都應當盡量降低其成員變數和成員函式的訪問許可權;在類的設計上,只要有可能,乙個型別應當設計成不變類;在對其他類的引用上,乙個物件對其他物件的引用應當降到最低。
下面通過乙個簡單例項來加深對迪公尺特法則的理解:
sunny軟體公司所開發crm系統包含很多業務操作視窗,在這些視窗中,某些介面控制項之間存在複雜的互動關係,乙個控制項事件的觸發將導致多個其他介面控制項產生響應,例如,當乙個按鈕(button)被單擊時,對應的列表框(list)、組合框(combobox)、文字框(textbox)、文字標籤(label)等都將發生改變,在初始設計方案中,介面控制項之間的互動關係可簡化為如圖1所示結構:
圖1 初始設計方案結構圖
在圖1中,由於介面控制項之間的互動關係複雜,導致在該視窗中增加新的介面控制項時需要修改與之互動的其他控制項的源**,系統擴充套件性較差,也不便於增加和刪除新控制項。
現使用迪公尺特對其進行重構。
在本例項中,可以通過引入乙個專門用於控制介面控制項互動的中間類(mediator)來降低介面控制項之間的耦合度。引入中間類之後,介面控制項之間不再發生直接引用,而是將請求先**給中間類,再由中間類來完成對其他控制項的呼叫。當需要增加或刪除新的控制項時,只需修改中間類即可,無須修改新增控制項或已有控制項的源**,重構後結構如圖2所示:
圖2 重構後的結構圖
】
物件導向設計原則之迪公尺特法則
迪公尺特法則來自於1987年美國東北大學 northeastern university 乙個名為 demeter 的研究專案。迪公尺特法則又稱為最少知識原則 leastknowledge principle,lkp 其定義如下 迪公尺特法則 law of demeter,lod 乙個軟體實體應當盡...
物件導向設計原則之迪公尺特法則
迪公尺特法則來自於1987年美國東北大學 northeastern university 乙個名為 demeter 的研究專案。迪公尺特法則又稱為最少知識原則 leastknowledge principle,lkp 其定義如下 迪公尺特法則 law of demeter,lod 乙個軟體實體應當盡...
物件導向設計原則 迪公尺特法則
迪公尺特法則 law of demeter,lod 乙個軟體實體應當盡可能少地與其他實體發生相互作用。如果乙個系統符合迪公尺特法則,那麼當其中某乙個模組發生修改時,就會盡量少地影響其他模組,擴充套件會相對容易,這是對軟體實體之間通訊的限制,迪公尺特法則要求限制軟體實體之間通訊的寬度和深度。迪公尺特法...