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