2.8迪米特法則
內(nèi)容來自尚硅谷Java設(shè)計模式(圖解+框架源碼剖析)_嗶哩嗶哩_bilibili
寫在前面:本文內(nèi)容大致和原視頻內(nèi)老師的筆記內(nèi)容相同,會偶爾插入自己的注釋和理解,盡量會完成作業(yè)
2.8.1基本介紹
1)????? 一個對象應(yīng)該對其他對象保持最少的了解
2)????? 類與類關(guān)系越密切,耦合度越大
3)????? 迪米特法則(Demeter Principle)又叫最少知道原則,即一個類對自己依賴的類知道的越少越好。也就是說,對于被依賴的類不管多么復(fù)雜,都盡量將邏輯封裝在類的內(nèi)部。對外除了提供的public 方法,不對外泄露任何信息
4)????? 迪米特法則還有個更簡單的定義:只與直接的朋友通信
5)????? 直接的朋友:每個對象都會與其他對象有耦合關(guān)系,只要兩個對象之間有耦合關(guān)系,我們就說這兩個對象之間是朋友關(guān)系。耦合的方式很多,依賴,關(guān)聯(lián),組合,聚合等。其中,我們稱出現(xiàn)成員變量,方法參數(shù),方法返回值中的類為直接的朋友,而出現(xiàn)在局部變量中的類不是直接的朋友。也就是說,陌生的類最好不要以局部變量的形式出現(xiàn)在類的內(nèi)部。
解釋直接朋友:現(xiàn)在有A類和B類,A類需要用到B類,那么就會成為朋友,A里有一個B b;這個屬性,可稱為直接朋友,或者A類里有一個方法m(B b){} 需要傳入一個B類的對象,可以稱為直接朋友,或者A類里有一個方法m2(){} 返回一個B類的對象,也可以稱為直接朋友,如果A類里有一個特方法m3(){},這個方法里面new了一個B b;那這種情況,B類就不是A類的直接朋友
2.8.2應(yīng)用案例
1)????? 有一個學(xué)校,下屬有各個學(xué)院和總部,現(xiàn)要求打印出學(xué)??偛繂T工ID和學(xué)院員工的id
2)????? 編程實現(xiàn)上面的功能,看代碼演示
2.8.3應(yīng)用實例改進
1)????? 前面設(shè)計的問題在于School Manager中,College Employee類并不是School Manager類的直接朋友(分析)
2)????? 按照迪米特法則,應(yīng)該避免類中出現(xiàn)這樣非直接朋友關(guān)系的耦合
3)????? 對代碼按照迪米特法則進行改進.(看老師演示)
代碼演示
2.8.4迪米特法則注意事項和細(xì)節(jié)
1)????? 迪米特法則的核心是降低類之間的耦合
2)????? 但是注意:由于每個類都減少了不必要的依賴,因此迪米特法則只是要求降低類間(對象間)耦合關(guān)系,并不是要求完全沒有依賴關(guān)系