2011-08-04 139 views
0

當談到設計模式時,我是一個初學者。任何想法實施戰略模式/像這樣:具有默認策略的策略模式

 
public class SomeClass { 

    private Strategy strategy = new DefaultStrategy(); 

    public void provideCustomStrategy(Strategy strategy) { 
     this.strategy = strategy; 
    } 
} 

這將確保鬆散耦合和戰略模式和DI的所有其他好處。同時,你不會強迫用戶提供策略,並且用戶可以決定爲角落案例提供自定義策略等。如果您爲構造函數提供策略,則可以通過構造器注入實現相同的目標-參數。我認爲這個實施將在很多情況下提供最大的靈活性。

+1

相關:http://stackoverflow.com/questions/6733667/is-there-an-alternative-to-bastard-injection-aka-poor-mans-injection-via-defau –

+0

謝謝!該帖子清除了一切! –

回答

1

這種方法的缺點是你有一個永久耦合到DefaultStrategy類。如果這會帶來任何重大包袱,您可能會在未來感到遺憾。

另一種可能是使用某種後期綁定。因此,您沒有默認策略,而是使用名稱作爲默認策略。在運行時,第一次使用時,我們查找名稱加載相應的類。現在我們可以通過調整名稱映射來控制策略。

這是JEE在JNDI中查找資源的一種可能性。

+1

好主意。我想你也可以做一個空檢查使用並實例化默認策略,如果沒有提供自定義。有點像懶惰的init。 –

0

我認爲最重要的是要考慮的是,這個實現是否最適合您的需求?我同意提供setter(我會將名稱更改爲setStrategy),但一方面是客戶需要確切知道哪些策略可用。您可以通過枚舉來爲客戶提供該信息,方法是保存每個可用的策略。然後客戶可以根據需要「熱切換」它們。

你可以在這裏看到我的示例代碼:www.jasonsjavadocs.com/XHTML/DesignPatterns.html,在「策略」部分下。