簡體   English   中英

使用工廠方法模式而不是簡單工廠的動機是什么

[英]What is the motivation of using factory method pattern rather than simple factory

令我困惑的是,這篇文章說使用工廠方法超過簡單工廠的動機要覆蓋打開封閉原則違規( 在這里檢查簡單工廠模式問題部分)但在頭部設計模式書中的例子仍然違反了開放封閉原則,如此鏈接中的圖像

在此輸入圖像描述

那么使用工廠方法比簡單工廠有什么好處?

工廠模式 - 簡單工廠模式文章作者寫道:

簡單工廠模式不是Gang of Four(GoF)書籍的一部分,但工廠方法模式和抽象工廠模式是本標准書的一部分。

簡單工廠模式 (SFP)在文章中幾乎被描述為工廠方法模式 (FMP),看起來有點像懶惰開發人員的解決方案。 SFP只引入了一個創建各種粉絲的類。 FMP為每種風扇類型引入了一個工廠。 現在,假設在示例中,控制台應用程序FanType由客戶端提供。 你將如何實現? 無論如何,您需要創建switchif-else對。 所以這取決於你放置這種代碼的位置。 看起來像SFP:是基於參數的switch + new

這張圖片下方的書中的另一面你可以找到

因此,通過將pizza創建封裝在一個類中, 我們現在只有一個位置可以在實現更改時進行修改

不要忘記,我們也只是要從客戶端代碼中刪除具體的實例。

那么,回答你的問題:從工廠方法設計模式的角度來看這兩個是相同的,它是意圖。 這取決於您希望實現switchif-else對的級別。 請參閱此示例: Java中的Factory方法,將其移至main方法。

看來你 Factory Method模式中有一個Simple Factory。 您可以通過創建新類( NYPizzaStoreLAPizzaStore ,...)來添加新的PizzaStore ,即無需切換。 但是NYPizzaStore使用Simple Factory來制作比薩餅(以及里面的開關)。

有關工廠之間的差異,請參閱此問題

關於開放封閉原則: PizzaStore因修改而關閉(抽象行為已定義且外部類可依賴它),但添加新商店沒有限制:open for extension。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM