設計模式原則 依賴倒轉 黎克特制代換原則

2022-05-16 08:33:27 字數 1421 閱讀 6028

設計模式一共有六大原則:

單一原則、開放封閉原則、介面分離原則、黎克特制替換原則、最少知識原則、依賴倒置原則。

依賴倒轉原則

高層模組不應該依賴於低層模組,兩者都應該依賴於抽象。

抽象不應該依賴細節,細節應該依賴抽象。

在物件導向程式設計領域中,依賴反轉原則(dependency inversion principle,dip)是指一種特定的解耦(傳統的依賴關係建立在高層次上,而具體的策略設定則應用在低層次的模組上)形式,使得高層次的模組不依賴於低層次的模組的實現細節,依賴關係被顛倒(反轉),從而使得低層次模組依賴於高層次模組的需求抽象。「**於:wiki」

eg:

問題由來:

乙個專案的資料庫的鏈結,增刪改查等會被復用,所以一般都會將其寫成函式,這些函式被稱為低層的函式。當我們呼叫這些函式的時候,高層次的**就依賴於這些低層的函式。

當我們再次做乙個新的專案的時候,發現高層的邏輯都是一樣的,僅僅是需要更換資料庫的儲存。這個時候,因為我們的高層模組依賴於低層的函式,是沒辦法復用這些模組的。

現在去修改高層的**會有很大的風險。

解決方案:

設定乙個介面或者抽象類,讓低層的函式實現其介面,高層的**通過介面呼叫低層的函式。這樣的如果更換低層函式,只需要讓新的低層函式實現其介面,而對於高層的**改的很少。大大降低了

因為低層函式修改而給高層帶來的影響。

而為什麼實現介面就不怕更改了那?這個就要涉及到另乙個設計模式原則——黎克特制代換原則了。

黎克特制代換原則

派生類(子類)物件可以在程式中代替其基類(超類)物件。

乙個軟體實體如果使用了父類的話,其一定可以適應其子類,它察覺不出父類與子類的差別。

也就是說,在軟體裡面,把父類都替換成子類,其行為沒有發生變化。

實際應用:

正式因為有了黎克特制代換原則,使繼承復用成為了可能。

只有當子類替換父類,軟體單元不受影響的情況下,父類才能得到復用。而子類可以在父類的基礎上增加新的行為。

eg:

貓是動物,動物擁有吃喝跑叫等行為。如果,我們需要狗,牛等動物擁有這些行為。讓狗,牛等繼承與動物。只需要更改建立的例項就好了。

uml:(大話設計模式)

總結:

1,需求的變化只需要改變其實例化的物件。

2,有了黎克特制代換原則才使開放封閉原則成為可能。

(正是由於子類可以替換父類,才使父類再不修改的情況下就可以擴充套件)

依賴倒轉原則 與 黎克特制代換原則

依賴倒轉原則 解釋 抽象不應該依賴細節,細節應該依賴於抽象。即,針對介面程式設計,不要對實現程式設計。實現 高層模組不應該依賴低層模組。兩個都應該依賴抽象。抽象不應該依賴細節。細節應該依賴抽象。價值 依賴倒轉是物件導向設計的標誌。如果編寫程式時考慮的都是如何針對抽象程式設計而不是針對細節程式設計。即...

《讀書筆記》設計模式 依賴倒轉原則 黎克特制代換原則

依賴倒轉原則 高層模組不應該依賴低層模組,兩個都應該依賴抽象。抽象不應該依賴細節,細節應該依賴抽象。兩點都說明了同乙個問題,就是 程式中的依賴關係都應該終止於抽象類或者介面,而不能終止於實現細節的具體類。高層模組與低層模組之間插入乙個抽象類或者介面,讓兩個模組同時依賴於抽象,這樣就實現了高層模組和低...

黎克特制代換和依賴倒轉原則 二

上節說到開閉原則的關鍵是抽象化,有了抽象化就要有具體化,從抽象化到具體化的過程,其實也是乙個繼承關係確立的過程。無論是 實現繼承 還是 介面繼承 在這個過程中,我們都要以黎克特制代換原則為指導 任何基類可以出現的地方,子類一定可以出現。依賴倒轉原則也有關於抽象和具體的描述 要依賴於抽象,不要依賴於具...