法則定義
迪米特法則(LawofDemeter)又叫作最少知識原則(LeastKnowledgePrinciple簡寫LKP),就是說一個對象應當對其他對象有儘可能少的了解,不和陌生人說話。英文簡寫為:LoD.迪迷特法則的由來
LoD[LawofDemeter]迪迷特法則軟體設計原則。迪米特法則(LawofDemeter,LoD)又叫最少知識原則(LeastKnowledgePrinciple,LKP)。1987年秋天由美國NortheasternUniversity的IanHolland提出,被UML的創始者之一Booch等普及。後來,因為在經典著作《ThePragmaticProgrammer》而廣為人知。
值得一提的是,雖然IanHolland對計算機科學的貢獻也僅限於這一條法則,其他方面的建樹不多,但是,這一法則卻不僅僅局限於計算機領域,在其他領域也同樣適用。比如,美國人就在航天系統的設計中採用這一法則。
模式與意義
迪米特法則可以簡單說成:talkonlytoyourimmediatefriends。對於面向OOD來說,又被解釋為下面幾種方式:一個軟體實體應當儘可能少的與其他實體發生相互作用。每一個軟體單位對其他的單位都只有最少的知識,而且局限於那些與本單位密切相關的軟體單位。
迪米特法則的初衷在於降低類之間的耦合。由於每個類儘量減少對其他類的依賴,因此,很容易使得系統的功能模組功能獨立,相互之間不存在(或很少有)依賴關係。
迪米特法則不希望類直接建立直接的接觸。如果真的有需要建立聯繫,也希望能通過它的友元類來轉達。因此,套用迪米特法則有可能造成的一個後果就是:系統中存在大量的中介類,這些類之所以存在完全是為了傳遞類之間的相互調用關係——這在一定程度上增加了系統的複雜度。
有興趣可以研究一下設計模式的門面模式(Facade)和中介模式(Mediator),都是迪米特法則套用的例子。
值得一提的是,雖然IanHolland對計算機科學的貢獻也僅限於這一條法則,其他方面的建樹不多,但是,這一法則卻不僅僅局限於計算機領域,在其他領域也同樣適用。比如,美國人就在航天系統的設計中採用這一法則。
什麼是迪迷特法則
迪米特法則可以簡單說成:talkonlytoyourimmediatefriends。對於面向OOD來說,又被解釋為下面幾種方式:
一個軟體實體應當儘可能少的與其他實體發生相互作用。
每一個軟體單位對其他的單位都只有最少的知識,而且局限於那些與本單位密切相關的軟體單位。
特點
迪米特法則的初衷在於降低類之間的耦合。由於每個類儘量減少對其他類的依賴,因此,很容易使得系統的功能模組功能獨立,相互之間不存在(或很少有)依賴關係。
迪米特法則不希望類直接建立直接的接觸。如果真的有需要建立聯繫,也希望能通過它的友元類來轉達。因此,套用迪米特法則有可能造成的一個後果就是:系統中存在大量的中介類,這些類之所以存在完全是為了傳遞類之間的相互調用關係——這在一定程度上增加了系統的複雜度。
有興趣可以研究一下設計模式的門面模式(Facade)和中介模式(Mediator),都是迪米特法則套用的例子。
相關描述
狹義的迪米特法則的缺點:
在系統里造出大量的小方法,這些方法僅僅是傳遞間接的調用,與系統的商務邏輯無關。
遵循類之間的迪米特法則會是一個系統的局部設計簡化,因為每一個局部都不會和遠距離的對象有直接的關聯。但是,這也會造成系統的不同模組之間的通信效率降低,也會使系統的不同模組之間不容易協調。
門面模式和調停者模式實際上就是迪米特法則的套用。
廣義的迪米特法則在類的設計上的體現:
優先考慮將一個類設定成不變類。
儘量降低一個類的訪問許可權。
謹慎使用Serializable。
儘量降低成員的訪問許可權。