學會設計模式,你就可以像擁有魔法一樣,在開發過程中解決一些復雜的問題。設計模式是由經驗豐富的開發者們(GoF)凝聚出來的最佳實踐,可以提高代碼的可讀性、可維護性和可重用性,從而讓我們的開發效率更高。通過不斷的練習和實踐,掌握其中的奧妙,選擇合適的設計模式,能為我們的項目增加一絲神奇的魔力。
文章目錄
- 定義
- 例子
- Coding
- 測試
- 測試結果
- 優點
- 缺點
定義
一個對象應該對其他對象保持最少的了解,使得系統功能模塊相對獨立。
即一個類作為一個調用方,應當對自己依賴的類(被調用的類)其中所處理的邏輯細節,知道的越少越好。
例子
食客到飯點通過服務員點餐,服務員通知廚師做菜
Coding
我們先定義一個類與類之間的關系:
- 如果被調用類在調用類中作為:成員變量的類型、方法參數類型、方法返回值類型,那么我們稱被調用類和調用類是“朋友”關系
- 如果被調用類在調用類中僅作為:局部變量,那么我們稱被調用類和調用類是“陌生人”關系
食客類:
食客吃飯,無需關心廚師如何烹飪菜肴。所以食客和服務員是朋友,和廚師是陌生人
public class Diner {public void order(Waiter waiter, String tableNumber, String dishName) {waiter.passDish(tableNumber, dishName);}
}
食客類中,因為入參中有Waiter類,所以Waiter和Diner是朋友。
服務員類:
public class Waiter {public Chef notice(String tableNumber) {System.out.println("服務員接到" + tableNumber + "號桌點菜");Chef chef = new Chef();return chef;}public void passDish(String tableNumbe, String dishName) {String cooking = notice(tableNumbe).cooking(dishName);System.out.println(cooking);System.out.println("服務員傳菜");}
}
服務員類中,notice方法返回值類型是Chef,所以服務員和廚師是朋友
注:類與類之間的耦合是不可避免的,遵循迪米特法則并不是完全解除依賴,而是在一定程度上降低類與類之間不必要的依賴。
廚師類:
public class Chef {public String cooking(String dishName) {return "廚師烹飪" + dishName;}
}
測試
@Test
public void test() {Diner diner = new Diner();Waiter waiter = new Waiter();diner.order(waiter, "11", "宮保雞丁");
}
測試結果
服務員接到11號桌點菜
廚師烹飪宮保雞丁
服務員傳菜
我們只能盡量的不要讓「陌生人」作為局部變量出現在類的內部,并且保障類對自己依賴的類知道的越少越好。
優點
1、降低了類之間的耦合度,提高了模塊的相對獨立性。
2、提高類的可復用率和系統的擴展性。
缺點
過度使用迪米特法則會使系統產生大量的中介類,從而增加系統的復雜性,使模塊之間的通信效率降低。所以,在釆用迪米特法則時需要反復權衡,確保高內聚和低耦合的同時,保證系統的結構清晰。
文章后期會持續優化,如果覺得小名的文章幫助到了您,請關注小名,支持一下小名😄,給小名的文章點贊👍、評論?、收藏🤞謝謝大家啦~???
編碼魔法師系列文章,會收錄在小名的【設計模式】專欄中,希望大家可以持續關注🎉