2009-02-21 25 views
1

可能重複:
What is your threshold to use factory instead of a constructor to create an object?讓我的所有類只通過Factory DP實例化的好處是什麼?

有什麼優勢,只有通過工廠DP實例化的所有我的班?

據瞭解,當你需要從類似對象列表中選擇執行某項任務時,Factory很好,比如說翻譯類(英語 - > frank,arab-> hebrew ...) 但是當你真的有一個可能的選擇,沒有理由用Factory方法來隱藏/抽象邏輯。

任何見解?

+0

請在SO上檢查此問題:[使用工廠代替構造函數來創建對象的閾值是什麼?](http://stackoverflow.com/questions/489623/what-is-your-threshold-to-使用-工廠INSTEAD-OF-A-構造函數來創建-AN-objec) – 2009-02-23 16:30:30

回答

1

你怎麼知道,未來不會有其他的可能性? 更改依賴項實現的最常見原因之一是單元測試。當你爲它編寫單元測試時,你是否真的希望所有的依賴都使用它們的實現? 完美地寫一個類時,你會聲明它需要什麼來完成它的工作作爲構造函數中的參數,而不關心實現來自哪裏。

使用工廠是這樣做的一個選擇,更好的辦法是使用依賴注入容器。有很少的開源容器 - 選擇一個適合您的需求。

1

您可能不希望所有的課程都來自手寫工廠。依賴注入可能更有用,您可以編寫對象,並且您使用的任何DI框架都可以爲您填充對象。如果充分利用DI,代碼中「新」呼叫的數量將會減少。

我們使用Spring很多,和Spring.NET,但也有許多其他選項。

2

工廠方法的一個普遍優勢是您可以控制公共接口後面的對象創建。因此,在不影響客戶端代碼的情況下,您可以稍後添加緩存機制等內容。

1

一個使用工廠模式是爲了克服你像Java和C#語言中找到constructor limitations

  1. 構造函數只能返回與其關聯的類的實例,從來沒有一個亞型 - 即使根據定義,子類型是可以接受的。

  2. 構造函數必須總是返回一個新的對象,而不是先前分配的對象。這可能很煩人 - 例如,真的不需要擁有多個相同的不可變對象的實例。

2

簡單地寫下你的代碼:使用構造函數。如果你發現構造函數稍後會限制你,那麼在那個時候重構使用一個工廠。避免投機設計:它增加了複雜性,但實際價值很小。

相關問題