開(kāi)放和關(guān)閉到底是什么
我們可以看一下對(duì)于開(kāi)閉原則的定義:
軟件中的對(duì)象(類,模塊,函數(shù)等等)應(yīng)該對(duì)于擴(kuò)展是開(kāi)放的籽慢,但是對(duì)于修改是封閉的浸遗。
或者更簡(jiǎn)潔:對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉箱亿。
其實(shí)我們可以把擴(kuò)展和修改進(jìn)行細(xì)分跛锌。
擴(kuò)展:增加原來(lái)沒(méi)有的功能。
修改:對(duì)已經(jīng)含有的功能做規(guī)則上的更改届惋。
這里面的開(kāi)閉是以功能為單位髓帽,比較成功的應(yīng)用就是插件,插件的增加和刪除脑豹,并不會(huì)干擾系統(tǒng)中的其他插件郑藏,插件間也相互獨(dú)立。
如何確保關(guān)閉
要確保關(guān)閉需要做到一下兩點(diǎn)
抽象化:確定其核心功能
輕量化:減少無(wú)關(guān)依賴項(xiàng)瘩欺,做到功能最簡(jiǎn)必盖。
功能交叉、覆蓋面廣是很難保證關(guān)閉的俱饿。
如何做到開(kāi)放
抽象(abstract)和接口(interface)是必不可少的,重寫(xiě)(override)可在原有功能的概念上更改不同的實(shí)現(xiàn)方式歌粥,接口不僅含有override的好處,而且對(duì)功能的劃分更加友好稍途,基于擴(kuò)展函數(shù)的使用阁吝,可對(duì)不同功能進(jìn)行相應(yīng)的擴(kuò)展。
擴(kuò)展的核心是依賴數(shù)量和方向上的控制械拍。
和依賴反轉(zhuǎn)有什么區(qū)別
開(kāi)閉原則的關(guān)注點(diǎn)是對(duì)功能變更的應(yīng)對(duì)手段突勇。依賴反轉(zhuǎn)的關(guān)注點(diǎn)是對(duì)分層策略、模塊解耦的控制坷虑。