設計模式之禪 黎克特制替換原則LSP

2021-09-27 01:42:02 字數 999 閱讀 2514

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

在類中呼叫其他類時務必要使用父類或者介面,如果不能使用父類或者介面,則說明類的設計已經

違背了lsp原則

如果子類不能完整地實現父類的方法,或者父類的某些方法在子類中已經發生「畸變」,

則建議斷開父子繼承關係,採用依賴、聚集、組合等關係代替繼承。

2.子類可以有自己的個性

子類可以有自己的方法和屬性
3.覆蓋或實現父類的方法時輸入引數可以被放大

4.覆寫或實現父類的方法時輸入引數可以被縮小

這是什麼意思呢,父類的乙個方法的返回值是乙個型別t,子類的相同方法(過載或覆寫)的返回值為s,

那麼黎克特制替換原則就要求s必須小於等於t,也就是說,要麼s和t是同乙個型別,要麼s是t的子類,

為什麼呢?

分兩種情況,

如果是覆寫,父類和子類的同名方法的輸入引數是相同的,兩個方法的範圍值s小於等於t,這是覆寫的要求,這才是重中之重,子類覆寫父類的方法,天經地義。

如果是過載,則要求方法的輸入引數型別或數量不相同,在黎克特制替換原則要求下,

就是子類的輸入引數寬於或等於父類的輸入引數,也就是說你寫的這個方法是不會被呼叫的,

參考上面講的前置條件。

採用黎克特制替換原則的目的就是增強程式的健壯性,版本公升級時也可以保持非常好的相容性。

即使增加子類,原有的子類還可以繼續執行。在實際專案中,每個子類對應不同的業務含義,

使用父類作為引數,傳遞不同的子類完成不同的業務邏輯,非常完美!

總結

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

設計原則之黎克特制替換原則(LSP)

lsp 黎克特制替換原則 兩種定義 型別t是型別s的子型別 所用引用基類的地方必須能透明的使用期子類物件 為什麼要使用黎克特制替換原則 讓繼承中的 利 大於 弊 發揮最大作用,同時減少 弊 所帶來的麻煩 繼承的優點是什麼?缺點?黎克特制替換要求凡是使用基類的地方,子類一定適用,因此子類必須具備基類的...

設計模式無限重讀之黎克特制替換原則(LSP)

黎克特制替換原則 liskov substitution principel 是解決繼承帶來的問題。繼承的優點 繼承的缺點 定義 所有引用基類的地方必須能透明地使用其子類的物件。通俗點講,只要父類能出現的地方子類就可以出現,而且替換為子類也不會產生任何錯誤或異常,使用者可能根本就不需要知道是父類還是...

黎克特制替換原則,LSP

所有引用基類的地方必須能夠透明地使用其子類的物件。通俗點講,只要父類能出現的地方子類就可以出現,而且替換為子類也不會產生任務異常。我們知道物件導向語言的三大特性就是繼承 封裝 多台,黎克特制替換原則就是依賴於繼承 多型,建立抽象,通過抽象建立規範,在執行時替換成具體的物件,保證系統的拓展性 靈活性。...