一、依賴倒轉原則
基本介紹:
(1)高層模塊不應該依賴底層模塊,二者應該依賴其抽象(依賴接口或抽象類,不要依賴具體的子類)
(2)抽象不應該依賴細節,細節應該依賴抽象
(3)依賴倒轉(倒置)的中心思想是面向接口編程
(4)使用接口或抽象類的目的是制定好規范,而不涉及任何具體的操作,把展現細節的任務交給他們的實現類去完成。
(5)依賴倒轉原則是基於這樣的設計理念:相對於細節的多變性,抽象的東西要穩定的多。以抽象為基礎搭建的架構比以細節為基礎的架構要穩定得多。在Java中,抽象多指的是接口或抽象類,細節指的就是具體的實現類。
二、案例演示
測試場景:Person類接收消息
案例地址:https://github.com/Simple-Coder/design-pattern
1、基礎版代碼實現
分析:完成了Person接收消息的功能
①優點:方便,簡單,容易實現
②缺點:如果我們獲取的對象是微信、短信呢,則需要新增對應類同時Person類也要增加對應的接收方法(Person目前只支持接收Email)。
2、改進版代碼實現
改進方案:采用依賴倒轉原則,引入一個抽象的接口IReceiver,表示接受者,這樣Person類與接口IReceiver發生依賴,這樣比上述的好處在哪里?Email、微信、短信等屬於接受者(IReceiver)范疇,它們各自實現IReceiver接口即可,這樣就符合依賴倒置原則,核心就是面向接口,細節依賴抽象,而不是抽象依賴細節。這樣設計才能更有彈性、伸縮性。
三、依賴關系傳遞方式
在依賴倒轉時,往往進行依賴關系傳遞,有以下3種方式:
1、接口傳遞
2、構造方法傳遞
3、setter方式傳遞
四、總結
1、低層模塊盡量都要有抽象類或接口,或者兩者都有,程序穩定性更好。
2、變量的聲明類型盡量是抽象類或接口
3、繼承時遵循里氏替換原則