2013-10-27 140 views
0

我使用策略設計模式實施了兩種不同的具體策略,第二種嚴重地重複使用第一種代碼,同時花費在其上。我想知道這是否「打破」了戰略設計模式的優勢,或者這是否有所不同?有沒有更好的方法來做到這一點,比如讓一個抽象類實現策略接口,並且從這個抽象類繼承兩個策略?策略設計模式中不同具體策略之間的依賴關係?

另一種方式來看待這個問題是:戰略設計模式的優點的事實,不同的策略可以在任何其他策略的添加和刪除,而不影響幹?如果是這樣,我應該將代碼複製到更復雜的具體策略中嗎?根據他們對某些類似關鍵字如何

  1. 第一排序的所有文章:


    在我的具體情況,我採取兩種不同的文章分類器的策略。

  2. 第二個策略第一排序的所有作者,然後排序基於它們對類似關鍵字如何調用的第一個具體戰略,會在每個作者的文章。

這是一個合適的設計?

+0

如何將簡單策略集成到更復雜的策略中? – raina77ow

+0

我編輯了這個問題以明確我所要求的 - 對(新增加的)第二段的回答將決定聚合策略是否合理。 – insertjokes

+2

我仍然認爲使用合成來彌合兩種策略之間的差距更容易。檢查[這個答案](http://stackoverflow.com/questions/13842420/combining-composite-and-strategy)看看它是如何做到的。 – raina77ow

回答

0

。我想知道這是否「打破」了戰略設計模式的優勢,或者這是否有所不同?

複製代碼是壞的;如果您必須在一個地方修復它,那麼您很可能會忘記將修復程序複製到所有副本中。想想可憐的靈魂誰必須支持這個混亂!

如果戰略有共同的代碼,那麼你可以

  • 把通用的代碼放到一個實用工具類,並添加總/添加公共類既實現的成員,

  • 把公共代碼轉換爲基類並在兩種實現中繼承此類

聚合通常比繼承更受歡迎。