迪米特法則(Law of Demeter)又叫作最少知識原則(Least Knowledge Principle 簡寫LKP),就是說一個對象應當對其他對象有儘可能少的瞭解,不和陌生人說話。
迪米特法則的初衷在於降低類之間的耦合。由於每個類儘量減少對其他類的依賴,因此,很容易使得系統的功能模塊功能獨立,相互之間不存在(或很少有)依賴關係。
迪米特法則可以簡單說成:talk only to your immediate friends。
朋友類的定義是這樣的:出現在成員變量、方法的輸入輸出參數中的類稱爲成員朋友類,而出現在方法體內部的類不屬於朋友類。
迪米特法則不希望類直接建立直接的接觸。如果真的有需要建立聯繫,也希望能通過它的友元類來轉達。
狹義的迪米特法則的缺點
遵循狹義的迪米特法則會產生一個明顯的缺點:會在系統裏造出大量的小方法,散落在系統的各個角落。這些方法僅僅是傳遞間接的調用,因此與系統的商務邏輯無關。當設計師試圖從一張類圖看出總體的架構時,這些小的方法會造成迷惑和困擾。
遵循類之間的迪米特法則會使一個系統的局部設計簡化,因爲每一個局部都不會和遠距離的對象有直接的關聯。但是,這也會造成系統的不同模塊之間的通信效率降低,也會使系統的不同模塊之間不容易協調。
與依賴倒轉原則互補使用
門面模式和調停者模式實際上就是迪米特法則的應用。
廣義的迪米特法則在類的設計上的體現:
優先考慮將一個類設置成不變類。
儘量降低一個類的訪問權限。
謹慎使用Serializable。
儘量降低成員的訪問權限。