一個對象應當對其他對象有盡可能少的了解。
11.1 迪米特法則的各種表述:
1)只與你直接的朋友們通信。
2)不要跟“陌生人”說話。
3)每一個軟件單位對其他的單位都只有最少的知識,而且局限于那些與本單位密切相關的軟件單位。
11.2 狹義的迪米特法則
如果兩個類不必彼此直接通信,那么這兩個類就不應當發生直接的相互作用。如果其中的一個類需要調用另一個類的某一個方法的話,可以通過第三者轉發這個調用。
朋友圈的確定
“朋友”條件:
1)當前對象本身(this)
2)以參量形式傳入到當前對象方法中的對象
3)當前對象的實例變量直接引用的對象
4)當前對象的實例變量如果是一個聚集,那么聚集中的元素也都是朋友
5)當前對象所創建的對象
任何一個對象,如果滿足上面的條件之一,就是當前對象的“朋友”;否則就是“陌生人”。
缺點:會在系統里造出大量的小方法,散落在系統的各個角落。
與依賴倒轉原則互補使用
11.3 迪米特法則與設計模式
門面模式*
調停者模式*
11.4 廣義的迪米特法則
迪米特法則的主要用意是控制信息的過載。在將迪米特法則運用到系統設計中時,要注意下面的幾點:
1)在類的劃分上,應當創建有弱耦合的類。
2)在類的結構設計上,每一個類都應當盡量降低成員的訪問權限。
3)在類的設計上,只要有可能,一個類應當設計成不變類。
4)在對其他類的引用上,一個對象對其對象的引用應當降到最低。
11.5 廣義迪米特法則在類的設計上的體現
1)優先考慮將一個類設置成不變類
2)盡量降低一個類的訪問權限
3)謹慎使用Serializable
4)盡量降低成員的訪問權限
5)取代C Struct
一個類似于C Struct的Java類:







一個好的設計:






































11.6 廣義迪米特法則在代碼層次上的實現
1)限制局域變量的有效范圍
|
|
歡迎大家訪問我的個人網站 萌萌的IT人