2011年5月10日 星期二

Design Principle - Open Close Principle

前言
本文要介紹的OCP,不是指證照考試中的Oracle Certified Professional,
而是OOD(物件導向設計)中的Open Close Principle(開放封閉原則)。

精神
系統的變動幾乎是必然的(沒有一成不變的系統,因為使用者是善變的),
開放封閉原則的精神在於面對系統的變動時,儘量不要修改既存的程式碼,
而是增加新的模組、類別來處理系統的變更。


反面範例


在反面例子中,你會注意到,當Painter要能夠畫三角形時,
除了須新增一個Triangle的類別外,
還得要去修改Painter類別,在其內增加一個drawTriangle方法。
這就違反了OCP,因為變更設計方式後,
其實可以只要新增Triangle類別即可,不用去變動Painter類別。
(還記得OCP的精神嗎?)
(儘量不要修改現存的程式碼,而是用擴充的方式來處理變動。)

正面範例


在正面例子中,你會發現,當Painter類別要能夠畫三角形時,
只須要增加一個Triangle類別即可。

後語
在某些情況下,不修改現有程式碼而達到變更目的是不可能的,
所以並非全部的程式都得套用設計原則才是良好設計,
因地制宜,設計系統時,不應一味地遷就設計原則,避免鑽牛角尖,
而是當用則用,思考程式能否套用設計原則才是。

延伸閱讀 - 設計模式
Factory Pattern
Bridge Pattern

延伸思考

如何設計支援plugins的程式?

沒有留言:

張貼留言