更新時間:2022-07-13 來源:黑馬程序員 瀏覽量:
開閉原則是面向對象世界里最基礎的設計原則,它指導我們如何建立一個穩定,靈活,可擴展的系統。開閉原則定義如下:
Software entities like classes,modules and functions should be open for extension but closed for modifications.
一個軟件實體(如類,模塊和函數)應該對擴展開放,對修改關閉。
開閉原則明確的告訴我們:軟件實現應該對擴展開放,對修改關閉,其含義是說一個軟件應該通過擴展來實現變化,而不是通過修改已有的代碼來實現變化的。
一個軟件產品只要在生命周期內,都會發生變化,即然變化是一個事實,我們就應該在設計時盡量適應這些變化,以提高項目的穩定性和靈活性,真正實現“擁抱變化”。開閉原則告訴我們應盡量通過擴展軟件實體的行為來實現變化,而不是通過修改現有代碼來完成變化,它是為軟件實體的未來事件而制定的對現行開發設計進行約束的一個原則。
里氏代換原則(Liskov Substitution Principle LSP)面向對象設計的基本原則之一。 里氏代換原則中說,任何基類可以出現的地方,子類一定可以出現。 LSP是繼承復用的基石,只有當衍生類可以替換掉基類,軟件單位的功能不受到影響時,基類才能真正被復用,而衍生類也能夠在基類的基礎上增加新的行為。里氏代換原則是對“開-閉”原則的補充。實現“開-閉”原則的關鍵步驟就是抽象化。而基類與子類的繼承關系就是抽象化的具體實現,所以里氏代換原則是對實現抽象化的具體步驟的規范。
簡單的理解為一個軟件實體如果使用的是一個父類,那么一定適用于其子類,而且它察覺不出父類對象和子類對象的區別。也就是說,軟件里面,把父類都替換成它的子類,程序的行為沒有變化。
但是反過來的代換卻不成立,里氏代換原則(Liskov Substitution Principle):一個軟件實體如果使用的是一個子類的話,那么它不能適用于其父類。