一個軟體應該要夠開放使得他可以被擴充,但是也要夠封閉以避免不必要的修改
這句話其實很像是繞口令而且看起來很矛盾
讓我們舉個例子
當我們有 功能/Bug 需要去修改程式時
最好的方法是甚麼? 在程式裡面加上一個flag?
這個是我覺得最可怕的解法...
每當遇到一個 新功能/Bug 就用flag去判斷
在一開始可以得到不錯的效果
但是當過了一個禮拜....兩個禮拜....兩個月之後
當某天必須回來看這份code 你會發現Long time ago......
(一個好的故事都是這麼開始的....可惜這是一個可怕的code....)
那麼多個flag到底是要幹嘛的
而且一大堆flag 你能很確定的說 這個flag的運作方式就跟當初想的時候一樣嗎?
我記憶力一向不太好 就算有註解 過了那麼久我也還是得把code重新看一次(崩潰...)
所以為了能修改程式又不要動到其他
在不同的情況下使用不同的class去處理事情
Strategy Pattern 就是用到了這個方法
好處是user只需要知道做了sort這個動作而不需要知道細節
有新功能被增加時並不會影響到main function (因為加在class裡)
沒有留言:
張貼留言