2011-02-07 112 views

回答

7

戰略是沒有一流的功能,語言的解決方法。您傳入一個策略對象,該策略對象決定您想要與其餘代碼分離的某個策略。考慮Java中的排序以及它們如何使用比較器,比較器是一個策略對象,允許您從排序算法中單獨指定排序策略。這允許您通過放棄不同的策略來重用代碼。

抽象工廠是用來創建其他對象,用抽象的部分是,你有一個工廠,返回工廠,一個實施的對象,其中的工廠訪問它通過接口的用戶。因此,一個工廠實現可以替換爲另一個工廠實現,因爲這些用戶僅取決於對象的接口。

+1

+1的第一句 – thepirat000 2014-08-07 05:53:17

8

意向比結構和實現細節不同的其他。一旦你掌握了這個關於INTENT意義重大的基本思想,那麼你將走在正確的道路上。

Understand the role of intent in design patterns

Intent for Strategy。這是行爲模式

  1. 定義一系列算法,封裝每一個算法,並使它們可以互換。策略可以讓算法獨立於使用它的客戶端。
  2. 捕獲接口中的抽象,在派生類中隱藏實現細節。

抽象工廠的意圖。這是一個創建模式

  1. 提供一個接口,用於創建相關或依賴對象的族,而不指定它們的具體類。
  2. 一個層次封裝:許多可能的「平臺」,以及一套「產品」的構建。
+0

好吧,那比什麼意圖/立志叫他們每個人的目標是?我警告說,startegy更接近於拾取正確的算法......但找不到依靠 – RanZilber 2011-02-07 20:46:56

0

工廠設計模式充當工廠,並根據您的請求在運行時生成不同種類的對象。所以控制是在運行時間,你可以在運行時決定你需要的對象。所以物體之間的耦合將會減少。

。另一方面,戰略設計模式,允許您使用採取分層結構的更好的控制「有一個」關係在「是」的關係。因爲如果我們試圖在更復雜的場景中使用繼承(是),那麼我們可能必須覆蓋繼承代世代的方法,並且它避免了代碼重用。

假設你創建了一個動物類(或接口),並且你有一個移動方法。

你希望通過擴展它來創建一個鳥類。因此,您將在move()方法下添加飛行功能。但企鵝的情況如何?他們將有步行功能。

因此,每次通過擴展Animal類創建動物時,您都必須重複移動move()方法。你可以清楚地理解move()方法更容易受到變化的影響,所以最好的做法是將變化的部分從核心代碼中分離出來。

簡單地說,我們可以創建一個單獨的層次結構來移動()方法。您可以通過setter方法將相關的move()方法分配給對象。所以控制傳遞給運行時間。下圖說明了這一事實;

enter image description here

以下是我的博客文章2,如果你喜歡,你可以參考他們的進一步細節。

  1. Factory Design pattern

  2. Strategy Design pattern

+0

更好。我鼓勵你在一般情況下經常關注你的博客,即使有更好的答案也要小心。這一個符合'披露'要求,但幾乎是毫無意義的絨毛。太多的答案是這樣的,你可能會被標記爲垃圾郵件。 – 2012-09-06 20:21:38