首頁>技術>

今天是國慶節,祝偉大的祖國生日快樂。今天我們來繼續學習設計模式,學習一下設計模式的基本設計原則,依賴倒置。依賴倒置,簡單而言,就是面向介面程式設計而非面向具體類。

依賴倒置要求我們,不能讓高層物件依賴低層的元件,而是應該依賴於抽象。這句話猛地看起來很難理解,今天我們來通過一個具體的例子,來講一講什麼是依賴倒置。

我們都知道,現在的小孩故事機功能特別強大,能夠播放兒歌、講故事、背古詩、還能夠講笑話,模擬各種各樣的樂器,假如讓我們來編寫一個故事機的程式,我們應該怎麼樣設計呢?

首先我們需要一個類,用來表示故事機,判斷如果按了講故事按鈕,那麼就來講故事,如果按了兒歌按鈕,那麼就播放兒歌,如果按了古詩按鈕,那麼就開始背誦古詩。我們的虛擬碼如下所示:

這種程式碼,很多程式設計師都會寫,不就是Ifelse嘛。如果這種程式碼要改進,那麼應該如何改進呢?不難想到,我們可以對每一個功能的程式碼都封裝成一個類,然後直接呼叫對用的類即可,例如古詩增加一個古詩類,然後也是直接呼叫對應的類。虛擬碼如下:

這種組合模式,在我們的程式碼裡非常的好用,但是存在什麼問題呢?我們不妨可以看下這個程式碼的依賴檔案,我們會發現,我們的故事機類,依賴了故事類、兒歌類、故事類等等,並且,如果我們新增或者刪除一個功能,都需要調整故事機類,這與設計模式對擴充套件開放,對修改關閉的原則不符合。所以,我們這裡便引出來依賴倒置。本來我們的故事機類依賴所有的底層類,現在改成故事機類只依賴於多媒體介面,而像故事類、兒歌類、笑話類都來依賴這個介面。這便是依賴倒置,我們來看下虛擬碼:

是不是發現我們故事機類的程式碼,變得簡潔了非常多。無論是對古詩、兒歌等多媒體的變更,還是新增或刪除一個多媒體類,故事機類都不需要關心。而是由多媒體的工廠類來關心,從而更大程度上的減少程式碼的耦合。

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • java基礎Spring(一)