軟件應該是可以擴展的,但是不可以修改的。
對擴展都是開放的,模塊式可以擴展來滿足新的行為,我們可以改變模塊的功能。
?
OCP的好處是,盡可能的減少修改模塊的次數和范圍,從而提高代碼的可維護性,復用性。比如操作系統的升級補丁,在修復bug的情況下,肯定是越小越小。如果說OCP做的不好,每次修改需要修改大量的文件,那就會導致補丁很大。
對于修改是封閉的,在擴展模塊的時候,不必改動源代碼的二進制文件,不管是.o文件還是.dll文件都不用改動。
問題的核心是怎么樣改變了模塊的功能卻又不改變模塊的代碼呢?
關鍵是抽象!
比如說,client類會調用server的一些接口,這樣就會對server產生依賴,如果想換一個server,那就需要修改client,這就違反了,OCP。好的做法是讓client依賴于一個接口,這樣client不會關注server的具體實現。
? ??
需要注意的一點是,為什么叫client interface而不是叫server Base?因為抽象類和它客戶的關系比和實現他們的類的關系更加重要。
?
真正的OCP是不可能會實現的,我們只能在可以預見的范圍內分析軟件的變化及不變,進行取舍。為了實現OCP而進行的過度的抽象是非常劃不來的。
?
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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