2013-10-27 139 views
0

如果你看起來都處理多個對象,那麼爲什麼我們有兩種模式的一件事?他們之間有什麼不同?我看過他們四人幫的書。策略模式就像Factory?

+0

可能重複[?廠和戰略模式之間的區別是什麼(http://stackoverflow.com/questions/616796/what-is-the-difference工廠和戰略之間的模式) – wheaties

+0

我不想強調這一點。一個面向對象的語言,特別是Java只有當你實現一個模式時可以使用這麼多的構造 - 你不能真正地離開他們在代碼中的外觀(它們必然會有重疊),以及它們是什麼'用於。 (這不是「處理多個對象」)。另一方面,你有語言功能編程功能,其中許多這些模式[變得不可見](http://norvig.com/design-patterns/ design-patterns.pdf) - 工廠,策略和命令都可以使用lambda表達式來實現。 – millimoose

回答

0

如果你已經學習了GoF書,然後研究創造和操作模式的差異。另見What is the difference between Factory and Strategy patterns?

+3

雖然這可能在理論上回答這個問題,[這將是更可取的](http://meta.stackexchange.com/q/8259)在這裏包括答案的基本部分,並提供鏈接供參考。 –

+0

感謝khunshan和Jan Dvorak。我已經瞭解了它們之間的差異,我正在深入研究它。更多的贖回將受到歡迎。 – user2925225

0

我很驚訝這個問題經常出現,因爲工廠和策略完全在兩個不同的類別。工廠是創造性的;戰略運作。我不需要進一步解釋,因爲Stack Overflow傳說@tvanfosson在這件事上創造了這個出色的post

還要記住,兩者可以同時共存。你可能有一個工廠生產可以注入課堂的策略。

更有趣的問題是戰略與Template Method之間的差異,兩種類似的模式在一個重要方面有所不同。對於繼承和委派的整個討論來說,這對於OO開發人員來說是非常好的事情。

+1

一些要點:國際海事組織說,@Vidya工廠只是一種解耦實例所依賴的相關對象的方法。在工廠中,可以在創建過程中使用策略在創建策略中選擇「運行時」。 – khunshan

+0

我認爲混淆來自於這兩個方面都傾向於使用接口來完成工作。從某種意義上說,你可能會實施一種戰略模式的工廠。 –

+0

第二點肯定是對的。因爲他們做了不同的事情,他們可以以任何方式共存。但接口是所有模式的重要組成部分。 – Vidya

0

僅僅通過查看代碼或分類就無法理解其差異。要正確掌握GoF模式,請查找他們的意圖:

策略:「定義一系列算法,封裝每個算法,並使它們可以互換。策略使算法獨立於使用它的客戶端。工廠方法:「定義一個創建對象的接口,但讓子類決定實例化哪個類。Factory方法讓類將實例化推遲到子類。」

下面是關於他們的解釋:的Difference between Factory Method and Strategy design patterns