迪米特法則(LoD):又稱最少知識原則(LKP),就是說一個對象應當對其他對象盡可能少的了解。
狹義的迪米特法則:
如果兩個類不必彼此直接通信,那么這兩個類就不應當發生直接的相互作用.如果其中一個類需要調用另一個類的方法的話,可以通過第三者轉發這個調用.
缺點:
會在系統內造出大量的小方法,散落在系統的各個角落.這些方法僅僅是傳遞間接的調用,因此系統與系統中的商業邏輯無關.當設計師試圖從一張類圖看出總體的構架時,這些小方法會造成迷惑和困擾.
為了克服狹義迪米特法則的缺點,可以使用依賴倒轉原則,引入一個抽象的類型引用"抽象陌生人"對象,使"某人"依賴于"抽象陌生人",換言之,就是將"抽象陌生人"變成朋友.
廣義的迪米特法則:
一個模塊設計得好壞的一個重要的標志就是該模塊在多大的程度上將自己的內部數據與實現有關的細節隱藏起來.
信息的隱藏非常重要的原因在于,它可以使各個子系統之間脫耦,從而允許它們獨立地被開發,優化,使用閱讀以及修改.
迪米特法則的主要用意是控制信息的過載.在運用迪米特法則到系統的設計中時,要注意以下幾點:
* 在類的劃分上,應當創建有弱耦合的類.類之間的耦合越弱,就越有利于復用.
* 在類的結構設計上,每一個類都應當盡量降低成員的訪問權限.
* 在類的設計上,只要可能,一個類應當設計成不變類.
* 在對其他類的引用上,一個對象對其他對象的引用應降到最低.
* 盡量限制局部變量的有效范圍.