手撕設計模式,如何理解依賴倒置原則和好萊塢原則

一、什麼是依賴倒置原則

依賴倒置原則,就是從客戶端代碼調用框架代碼,變成框架調用客戶端代碼。框架來定義接口,客戶端來實現。
(1)高層模塊不應該依賴底層模塊,二者都應該依賴抽象
(2)抽象不應該依賴細節,細節應該依賴抽象
(3)依賴倒置原則的中心思想是面向接口編程
(4)依賴倒置原則是基於這樣的設計理念:相對於細節的多變性,抽象的東西要穩定的多,以抽象爲基礎搭建的架構比以細節爲基礎搭建的架構要穩定的多

二、爲什麼有時候依賴倒置原則又被稱爲好萊塢原則?

好萊塢原則:別打電話給我,有事我會打電話給你
好萊塢原則用在系統的高層組件和低層組件之間,低層組件將自己掛鉤到系統上,高層組件會來決定什麼時候和如何調用低層組件。高層組件對待低層組件的方式是,別來調用我,我會調用你。
好萊塢原則和依賴倒置原則之間還是有所區別的。
依賴倒置原則更多是說,我們應該面向接口編程;好萊塢原則是說,低層組件將自己掛鉤到系統上,由系統來主動調用。

三、tomcat 框架如何實現依賴倒置原則的

在這裏插入圖片描述
如圖是tomcat處理web請求的流程圖,請求會經過 connector,coyote,engine,host,context,Servlet,層層傳遞最終傳遞到我們的應用程序裏面來。我們只需要把程序發佈成war包放在指定的目錄下即可使用。
我們的應用程序就是低層組件,底層組件沒有去調用tomcat的什麼類,而是框架層主動調用應用程序來處理。
這就體現了依賴倒置原則,高層組件來定義接口和規範,底層組件來實現。

四、利用接口隔離原則優化下面的緩存類

如圖,希望 reBuild 方法只是給框架調用,客戶端不應該調用 reBuild 類,該如何設計
在這裏插入圖片描述
思路如下:
caache 實現類中有四個方法,其中 put get delete 方法是需要暴露給應用程序的,rebuild 方法是需要暴露給系統進行遠程調用的。如果將 rebuild 暴露給應用程序,應用程序可能會錯誤調用 rebuild 方法,導致 cache 服務失效。按照接口隔離原則:不應該強迫客戶程序依賴它們不需要的方法。也就是說,應該使 cache 類實現兩個接口,一個接口包含 get put delete 暴露給應用程序,一個接口包含 rebuild 暴露給系統遠程調用。從而實現接口隔離,使應用程序看不到 rebuild 方法。
在這裏插入圖片描述