close
oo的概念,是為了增加設計彈性,讓寫好的CODE可以好維護,好修改。對此,需要降低程式間的相依性,白話的說,就是要改CODE,只要改一點點,不用搜尋整個專案,修改整個專案相關的變數或方法。
工廠模式的存在也是為了最小變動,滿足封閉開放原則(OCP)。
當寫好的lib裡面,例如我今天寫了瀏覽器的lib,我先訂好interface有關瀏覽器的操作行為,而實踐這個介面的,可能是firefox,可能是chrome,可能是ie。
以現有的需求,我實作了firefox而已,但過了一段時間,我希望這個lib支援的瀏覽器也改為chrome,所以我又實作了chrome。
對lib而言,我只要再寫一個chrome的實作,沒有太大的問題。
問題出在,使用這個lib的應用層上面。如果我這包lib沒有釋出,純粹我自己在用,那我只要把new firefox的地方,改為new chrome ,雖然麻煩,但還是可以順利改完。
但如果這包lib我釋出了,有其他user在用,那問題就大了。user原本寫好的應用,會因為我的變動,造成麻煩,難道你要一一打電話請他們變動嗎??
所以,底層的lib可以擴充,但擴充也不應該影響到上層的應用,這是OO的精神,開放封閉原則,可以擴充新功能,但不用修改已寫好的CODE。
工廠模式的實踐請參考
https://dotblogs.com.tw/joysdw12/archive/2013/09/12/design-pattern-factory-method-pattern.aspx
全站熱搜