天天看點

設計模式之禅之六大設計原則-裡氏替換原則

裡氏替換原則

說的就是面向對象語言的繼承

--->代碼共享,減少建立類的工作量,每個子類都擁有父類的方法和屬性。

--->提高代碼的重用性。

--->子類可以形似父類,但又特殊于父類。

--->提高代碼的可擴充性。實作父類的方法,可以為所欲為。許多開源架構的接口都是繼承父類完成的。

--->提高産品或項目的開放性。

--->繼承是侵入性的。子類必須擁有父類的屬性和方法。讓子類自由的世界中多了些限制。

--->增強了耦合性。當父類的常量,變量和方法被修改時,需要考慮子類的修改。造成混亂。

裡氏替換原則的定義

第一種定義:如果對于每一個類型為S(子類)的對象01,都有類型為T(父類)的對象02,使得以T(父類)定義的所有程式P所在的對象01都替換成02時,程式P的行為沒有發生變化,那麼類型S是類型T的子類型。

第二種定義:所有引用基類(父類)的地方必須能透明地使用其子類的對象。通俗講,就是隻要父類能出現的地方子類就可以出現,而且替換成子類也不會産生任何錯誤或異常。使用者可能根本就不需要知道是父類還是子類。但是,反過來就不行了,有子類出現的地方,父類未必就能适應。

裡氏替換原則的規範

---->子類必須完全實作父類的方法。

---->子類可以有自己的個性。

---->覆寫或實作父類的方法時,同名字的方法的輸入參數可以被放大。(參數類型可以是父類參數類型的父輩級别的類型),但這不是重寫,而是重載。

---->覆寫或實作弗雷的方法時輸出結果可以被縮小(傳回結果,子類的傳回類型可以是父類傳回類型的子類輩)

裡氏替換原則的目的

--->就是增強程式的健壯性,版本更新時也可以保持非常好的相容性。即使增加子類,原有的子類還可以繼續運作。在實際項目中,每個子類對應不同的業務含義,使用父類作為參數,傳遞不同的子類完成不同的業務邏輯,非常完美。

繼續閱讀