本文要介紹的OCP,不是指證照考試中的Oracle Certified Professional,
而是OOD(物件導向設計)中的Open Close Principle(開放封閉原則)。
精神
系統的變動幾乎是必然的(沒有一成不變的系統,因為使用者是善變的),
開放封閉原則的精神在於面對系統的變動時,儘量不要修改既存的程式碼,
而是增加新的模組、類別來處理系統的變更。
反面範例
在反面例子中,你會注意到,當Painter要能夠畫三角形時,
除了須新增一個Triangle的類別外,
還得要去修改Painter類別,在其內增加一個drawTriangle方法。
這就違反了OCP,因為變更設計方式後,
其實可以只要新增Triangle類別即可,不用去變動Painter類別。
(還記得OCP的精神嗎?)
(儘量不要修改現存的程式碼,而是用擴充的方式來處理變動。)
正面範例
在正面例子中,你會發現,當Painter類別要能夠畫三角形時,
只須要增加一個Triangle類別即可。
後語
在某些情況下,不修改現有程式碼而達到變更目的是不可能的,
所以並非全部的程式都得套用設計原則才是良好設計,
因地制宜,設計系統時,不應一味地遷就設計原則,避免鑽牛角尖,
而是當用則用,思考程式能否套用設計原則才是。
延伸閱讀 - 設計模式
Factory Pattern
Bridge Pattern
延伸思考
如何設計支援plugins的程式?
沒有留言:
張貼留言