軟件應(yīng)該是可以擴(kuò)展的,但是不可以修改的。
對(duì)擴(kuò)展都是開(kāi)放的,模塊式可以擴(kuò)展來(lái)滿足新的行為,我們可以改變模塊的功能。
?
OCP的好處是,盡可能的減少修改模塊的次數(shù)和范圍,從而提高代碼的可維護(hù)性,復(fù)用性。比如操作系統(tǒng)的升級(jí)補(bǔ)丁,在修復(fù)bug的情況下,肯定是越小越小。如果說(shuō)OCP做的不好,每次修改需要修改大量的文件,那就會(huì)導(dǎo)致補(bǔ)丁很大。
對(duì)于修改是封閉的,在擴(kuò)展模塊的時(shí)候,不必改動(dòng)源代碼的二進(jìn)制文件,不管是.o文件還是.dll文件都不用改動(dòng)。
問(wèn)題的核心是怎么樣改變了模塊的功能卻又不改變模塊的代碼呢?
關(guān)鍵是抽象!
比如說(shuō),client類會(huì)調(diào)用server的一些接口,這樣就會(huì)對(duì)server產(chǎn)生依賴,如果想換一個(gè)server,那就需要修改client,這就違反了,OCP。好的做法是讓client依賴于一個(gè)接口,這樣client不會(huì)關(guān)注server的具體實(shí)現(xiàn)。
? ??
需要注意的一點(diǎn)是,為什么叫client interface而不是叫server Base?因?yàn)槌橄箢惡退蛻舻年P(guān)系比和實(shí)現(xiàn)他們的類的關(guān)系更加重要。
?
真正的OCP是不可能會(huì)實(shí)現(xiàn)的,我們只能在可以預(yù)見(jiàn)的范圍內(nèi)分析軟件的變化及不變,進(jìn)行取舍。為了實(shí)現(xiàn)OCP而進(jìn)行的過(guò)度的抽象是非常劃不來(lái)的。
?
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
