1. 程式人生 > >設計模式之依賴倒轉原則

設計模式之依賴倒轉原則

過程 客戶 新項目 信息 擔心 父類 繼承 為什麽 一起

抽象不應該依賴細節,細節應該依賴於抽象。說白了,就是要針對接口編程,不要對實現編程。可以用電腦的設計來理解,無論主板,CPU,內存,還是硬盤都是針對接口設計的。如果針對實現設計,內存就要對應到具體每個品牌的主板,就會出現換內存就需要把主板換掉的尷尬。

依賴倒轉原則:1.高層模塊不應該依賴低層模塊,兩個都應該依賴抽象。 2.抽象不應該依賴細節,細節應該依賴抽象。

那為什麽要叫倒轉呢?面向過程開發時,為了使得常用的代碼可以復用,一般都會把這些常用代碼寫成許許多多函數的程序庫,這樣我們在做新項目的時候去調用這些低層的函數就可以了。但這樣做就有可能出問題,我們做新項目時,發現業務邏輯和高層模塊都是一樣的,但客戶卻希望使用不同的數據庫或存儲信息的方式,這時就麻煩了。我們希望再次利用這些高層模塊,但高層模塊是與低層的數據庫綁定在一起的,沒辦法復用。而如果不管高層模塊還是低層模塊都依賴於抽象,具體一點就是接口或抽象類,只要接口是穩定的,那麽任何一個更改都不用擔心其他受到影響。這就使得無論高層還是低層都可以很容易地被復用,這才是最好的方法。

但為什麽依賴了接口或抽象類就不怕更改了呢?這裏涉及了裏氏代換原則。

裏氏代換原則是Barbara Liskov女士在1988年發表的。白話翻譯就是一個軟件實體如果使用的是一個父類的話,那麽一定適用於其子類,而且察覺不出父類對象和子類對象的區別。也就是說,在軟件裏面,把父類都替換成子類,程序的行為沒有變化。

裏氏代換原則:子類型必須能夠替換掉他們的父類型。

這時學繼承就要理解的相關概念。也正是有了這個原則,使得繼承復用成為了可能。只有當子類可以替換掉父類,軟件單位的功能不受到影響時,父類才能真正被復用,而子類也能在父類的基礎上增加新的行為。

說白了,依賴倒轉就是除了約定的接口,誰也不要依靠誰,這樣大家都可以靈活自如。

設計模式之依賴倒轉原則