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