【設計模式】里氏替換原則

以下內容來自《Java設計模式》

里氏代換原則

里氏代換原則由2008年圖靈獎得主、美國第一位計算機科學女博士、麻省理工學院的Barbara Liskov(芭芭拉-利斯科夫)教授和卡內基-梅隆大學的Jeannette Wing教授於1994年提出,里氏代換原則以Barbara Liskov教授的姓氏命名。其嚴格表述如下:如果對每個類型爲S的對象o1都有類型T的對象o2,使得以T定義的所有程序P在所有的對象o1都代換o2時程序P的行爲沒有變化,那麼類型S是類型T的子類型。這個定義不太容易理解,因此一般使用它的另一個通俗版定義:

里氏代換原則:所有引用基類的地方必須能透明地使用其子類的對象

里氏代換原則表明,在軟件中將一個基類對象替換成它的子類對象,程序將不會產生任何錯誤和異常,反過來則不成立,如果一個軟件實體使用的是一個子類對象,那麼它不一定能夠使用基類對象。例如我喜歡動物,那我一定喜歡狗,因爲狗是動物的子類,但是我喜歡狗,不能據此判定我喜歡所有的動物。

里氏替換原則是實現開閉原則的重要方式之一,由於在使用基類對象的地方都可以使用子類對象,因此在程序中儘量使用基類類型來對對象進行定義,而在運行時再確定其子類類型,用子類對象來替換父類對象。

在運用里氏替換原則時應該將父類設計爲抽象類或者接口,讓子類繼承父類或實現父接口,並實現在父類中聲明方法,在運行時子類實例替換父類實例,可以很方便地擴展系統的功能,無須修改原有子類的代碼,增加新的功能可以通過增加一個新的子類來實現。

 
 
 

2 設計模式的七大原則

【設計模式】單一職責原則
【設計模式】開閉原則
【設計模式】里氏替換原則

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章