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

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 抹茶獅子 的頭像
    抹茶獅子

    抹茶控的Wonderland

    抹茶獅子 發表在 痞客邦 留言(0) 人氣()