迪米特法則

迪米特法則(Law of Demeter)又叫作最少知識原則(Least Knowledge Principle 簡寫LKP),就是說一個對象應當對其他對象有儘可能少的了解,不和陌生人說話。英文簡寫為: LoD.

基本介紹

  • 中文名:迪米特法則
  • 外文名:Law of Demeter
  • 別稱:最少知識原則
  • 表達式:talk only to your immediate friends
  • 提出者:Ian Holland
  • 提出時間:1987年秋
  • 簡寫:LKP
來源歷史,模式與意義,相關描述,

來源歷史

1987年秋天由美國Northeastern University的Ian Holland提出,被UML的創始者之一Booch等普及。後來,因為在經典著作《 The Pragmatic Programmer》而廣為人知。

模式與意義

迪米特法則可以簡單說成:talk only to your immediate friends。 對於OOD來說,又被解釋為下面幾種方式:一個軟體實體應當儘可能少的與其他實體發生相互作用。每一個軟體單位對其他的單位都只有最少的知識,而且局限於那些與本單位密切相關的軟體單位。
迪米特法則的初衷在於降低類之間的耦合。由於每個類儘量減少對其他類的依賴,因此,很容易使得系統的功能模組功能獨立,相互之間不存在(或很少有)依賴關係。
迪米特法則不希望類之間建立直接的聯繫。如果真的有需要建立聯繫,也希望能通過它的友元類來轉達。因此,套用迪米特法則有可能造成的一個後果就是:系統中存在大量的中介類,這些類之所以存在完全是為了傳遞類之間的相互調用關係——這在一定程度上增加了系統的複雜度。
有興趣可以研究一下設計模式的門面模式Facade)和中介模式(Mediator),都是迪米特法則套用的例子。
值得一提的是,雖然Ian Holland對計算機科學的貢獻也僅限於這一條法則,其他方面的建樹不多,但是,這一法則卻不僅僅局限於計算機領域,在其他領域也同樣適用。比如,美國人就在航天系統的設計中採用這一法則。

相關描述

狹義的迪米特法則
如果兩個類不必彼此直接通信,那么這兩個類就不應當發生直接的相互作用。如果其中的一個類需要調用另一個類的某一個方法的話,可以通過第三者轉發這個調用。
朋友圈的確定
“朋友”條件:
1)當前對象本身(this)
2)以參量形式傳入到當前對象方法中的對象
3)當前對象的實例變數直接引用的對象
4)當前對象的實例變數如果是一個聚集,那么聚集中的元素也都是朋友
5)當前對象所創建的對象
任何一個對象,如果滿足上面的條件之一,就是當前對象的“朋友”;否則就是“陌生人”。
狹義的迪米特法則的缺點:
在系統里造出大量的小方法,這些方法僅僅是傳遞間接的調用,與系統的業務邏輯無關。
遵循類之間的迪米特法則會是一個系統的局部設計簡化,因為每一個局部都不會和遠距離的對象有直接的關聯。但是,這也會造成系統的不同模組之間的通信效率降低,也會使系統的不同模組之間不容易協調。
門面模式調停者模式(中介者模式)實際上就是迪米特法則的套用。
廣義的迪米特法則在類的設計上的體現:
優先考慮將一個類設定成不變類。
儘量降低一個類的訪問許可權。
謹慎使用Serializable。
儘量降低成員的訪問許可權。

相關詞條

熱門詞條

聯絡我們