黎克特制替換原則(liskov substitution principel)是解決繼承帶來的問題。
繼承的優點:
繼承的缺點:
定義:所有引用基類的地方必須能透明地使用其子類的物件。
通俗點講,只要父類能出現的地方子類就可以出現,而且替換為子類也不會產生任何錯誤或異常,使用者可能根本就不需要知道是父類還是子類。但是,反過來就不行了,有子類出現的地方,父類未必就能適應。
含義:
在類中呼叫其他類時務必要使用父類或介面,如果不能使用父類或介面,則說明類的設計已經違背了黎克特制替換原則。
如果子類不能完整地實現父類的方法,或者父類的某些方法在子類中發生了「畸變」,則建議斷開父子繼承關係,採用依賴、聚集、組合等關係代替繼承。
如果子類的前置條件較小,子類在沒有覆寫父類的方法的前提下,子類方法被執行了,這會引起業務邏輯混亂,因為在實際應用中父類一般都是抽象類,子類是實現類,你傳遞乙個這樣的實現類就會「歪曲」了父類的意圖,引起一堆意想不到的業務邏輯混亂。
目的:採用黎克特制替換原則的目的就是增強程式的健壯性,版本公升級是也可以保持非常好的相容性。即使增加子類,原有的子類還可以繼續執行。在實際專案中,每個子類對應不同的業務含義,使用父類作為引數,傳遞不同的子類完成不同的業務邏輯。
設計模式六大原則 黎克特制替換原則
設計模式總覽 黎克特制代換原則 liskov substitution principle lsp 物件導向設計的基本原則之一。黎克特制代換原則中說,任何基類可以出現的地方,子類一定可以出現 並且完全察覺不出父類物件和子類物件的區別。黎克特制代換原則是乙個規範性原則,它是繼承復用的基石。只有按照這個...
六大原則之黎克特制替換原則
如果對乙個型別為s的物件o1,都有型別為t的物件o2,使得以s定義的所有程式p 中所有的物件o1都替換成o2是,程式p的行為沒有發生變化,那麼型別t是型別s的子型別。按照黎克特制替換原則,當多個類之間存在繼承關係時,通常應該使用父類或介面來指向子類的物件,這樣有利於提高系統的可擴充套件性。我們都知道...
設計模式 2 六大原則之黎克特制替換原則
肯定有不少人跟我剛看到這項原則的時候一樣,對這個原則的名字充滿疑惑。其實原因就是這項原則最早是在1988年,由麻省理工學院的一位姓裡的女士 barbara liskov 提出來的。定義1 如果對每乙個型別為 t1的物件 o1,都有型別為 t2 的物件o2,使得以 t1定義的所有程式 p 在所有的物件...