先附上參考來源: 設計模式 - 工廠方法及抽象工廠
工廠方法模式
定義:
工廠方法模式定義了一個建立物件的介面,但由子類決定要實例化的類別為何。工廠方法讓類別把 實例化 的動作推遲到了子類
註:這邊是延續前幾天的簡單工廠模式,我對兩者差異的理解是,工廠模式是另外建立一個工廠類,將物件創造和實作給分開來,而工廠方法模式,強調的概念是父類定義介面,由子類決定要實例化的類別,藉此達成降低同類方法互call的依賴性,適合使用時間是,類別開始有了階層,要開始做解耦的時候
解釋:
作者文中的舉例是,假設pizza店生意大好,決定要到紐約州開分店了,該怎麼使用工廠方法模式,設計類別關係,達成開放封閉原則,對修改保持開放,對修改封閉,建議可以大略看完這一段之後,特別留意作者下方畫的結構圖與解釋,簡單說實作工廠方法模式,有四個要素分別是Creator(PizzaStore)、ConcreteCreator(NYPizzaStore)、Product(Pizza)、ConcreteProduct(NYStyleCheesePizza),我的理解是在Creator(PizzaStore)父類中,定義Product(Pizza)要建造的物件介面,接著由ConcreteCreator(NYPizzaStore) 子類實作介面,而由於每個子類要實作出的物件各有不同,因此需要再另外建立ConcreteProduct(NYStyleCheesePizza)
以下有兩個情境,我根據我的理解來解釋
1.我要在LA開新分店,單獨開賣 cheese 口味,根據目前架構,我該如何實作?
我要再建立一個子類 ConcreteCreator(LAPizzaStore)繼承自父類Creator(PizzaStore),再建立ConcreteProduct(LAStyleCheesePizza)提供子類建立物件
2.我要在既有紐約州,另外開發限定珍珠口味pizza,我該怎麼實作?
我要再建立一個ConcreteProduct(NYStyleBubblePizza),並在ConcreteCreator(NYPizzaStore) 子類新增一個判斷是,當type符合 “bubble” 時候,new NYStyleBubblePizza()
優點
缺點
本篇是個人理解紀錄,可能略有出入,完整內容請參考原文