迪米特法則描述的是:一個對象應該對其他對象有最少的了解。通俗的講 ,一個類應該對自己需要耦合或調用的類知道得最少,你的内部是如何複雜都和我沒關系,那是你的事,我就知道你提供了這麼多public方法,我就調用這麼多,其他的我一概不關心。
迪米特法則對類的低耦合提出來明确的要求。
1.隻和朋友交流
迪米特法則還有個英文解釋:隻與直接的朋友通信。每個對象都比如會與其他對象有耦合關系,兩個對象之間的耦合就成為朋友關系,這種關系的類型有很多,例如組合、聚合、依賴等。
一個類隻和朋友交流,不與陌生類交流,不要出現getA().getB().getC()這種情況,類與類之間的關系是建立在類間的,而不是通路間的,是以一個方法盡量不引入一個類中不存在的對象。
2.朋友間也是有距離的
一個類公開的 public 屬性或方法越多,修改時涉及的面對越大,變更引起的風險擴散也就越大。是以。為了儲存朋友間的距離,在設計是需反複衡量:是否還可以再減少 public 方法和屬性,是否可以修改為 private、package-private、protected等通路權限,是否可以加上 final 關鍵字。
迪米特法則要求類“羞澀”一點, 盡量不要對外公布太多 public 方法和非靜态的 public 變量。
3.是自己就是自己的
在實際應用中經常會出現一個方法:放在本類也可以,放在其他類也沒有錯,那怎麼去衡量呢?你可以堅持這樣一個原則:如果一個方法放在本類中,即不增加類間關系,也對本類不産生負面影響,那就放置在本類中。
迪米特法則的核心觀念就是類間解耦,弱耦合,隻有弱耦合後,類的複用率才可以提高。其要求的結果就是産生大量的中轉或跳轉類,導緻系統的複雜性提高,同時也為維護帶來了難度。原則隻是供參考,如果違背了原則,項目不一定會失敗,不遵守是不對的,嚴格執行就是“過猶不及”。