六大設計原則之黎克特制替換原則

2021-08-21 14:29:50 字數 889 閱讀 8428

liskov substitution principle(簡稱lsp)

第一種定義, 如果對每乙個型別為s的物件o1, 都有型別為t的物件o2, 使得以t定義的所有程式p在所有的物件o1都代換成o2時, 程式p的行為沒有發生變化, 那麼型別s是型別t的子型別。 

第二種定義, 所有引用基類的地方必須能透明地使用其子類的物件。 

**共享,每個子類都擁有父類的方法和屬性。

提高**的重用性。

子類可以形似父類,又異於父類。

提高**的可擴充套件性,很多開源框架的擴充套件介面都是通過繼承父類來完成的。

提高產品或專案的開放性。

繼承是侵入性的。

降低**的靈活性。子類必須擁有父類的屬性和方法。

增強了耦合性,當父類的常亮、變數和方法被修改時,需要考慮子類的修改。

如果子類的輸入引數變小,那麼子類代替父類時,會呼叫子類的方法,這會導致業務混亂。原則上,子類不允許改變父類的方法。 

覆蓋或實現父類方法時輸出結果必須相等或縮小,否則無法覆蓋或實現。如果是過載,因為規則三,那麼子類方法永遠不會被呼叫。

子類必須完全實現父類的方法

子類可以有自己的個性

覆蓋或實現父類的方法時輸入引數可以被放大 

覆蓋或實現父類的方法時輸出結果可以被縮小

子類可以擴充套件父類的功能,但不能改變父類原有的功能。

父類能出現的地方都可以用子類來代替,而且換成子類也不會出現任何錯誤或異常,而使用者也無需知道是父類還是子類,但反過來就是不行,總之,就是抽象。

在專案中, 採用黎克特制替換原則時, 盡量避免子類的「個性」, 一旦子類有「個性」, 這個子類和父類之間的關係就很難調和了, 把子類當做父類使用, 子類的「個性」被抹殺——委屈了點; 把子類單獨作為乙個業務來使用, 則會讓**間的耦合關係變得撲朔迷離——缺乏類替換的標準。

六大原則之黎克特制替換原則

如果對乙個型別為s的物件o1,都有型別為t的物件o2,使得以s定義的所有程式p 中所有的物件o1都替換成o2是,程式p的行為沒有發生變化,那麼型別t是型別s的子型別。按照黎克特制替換原則,當多個類之間存在繼承關係時,通常應該使用父類或介面來指向子類的物件,這樣有利於提高系統的可擴充套件性。我們都知道...

六 設計原則之黎克特制替換原則

今天的部落格主題 設計原則和模式 設計原則之黎克特制替換原則 黎克特制替換原則 lsp liskov substitution principle 任何基類可以出現的地方,子類一定可以出現。黎克特制替換原則是繼承復用的基石,只有當衍生類可以替換掉基類,基類的功能不收影響,基類才能真正被復用,衍生類也...

設計模式六大原則 黎克特制替換原則

設計模式總覽 黎克特制代換原則 liskov substitution principle lsp 物件導向設計的基本原則之一。黎克特制代換原則中說,任何基類可以出現的地方,子類一定可以出現 並且完全察覺不出父類物件和子類物件的區別。黎克特制代換原則是乙個規範性原則,它是繼承復用的基石。只有按照這個...