名單
SomeStrategyInterface
- 接口策略模式
FooStrategy
- 實施SomeStrategyInterface
BarStrategy
- 實施SomeStrategyInterface
BazStrategy
- 實施SomeStrategyInterface
StrategyProvider
的 - 工廠類,以提供具體實施SomeStrategyInterface
MessageDispatcher
的 - 類信息調度工作線程的消息類型的0 ABTask
- 一型工人類的,其處理細節的消息類型,並需要StrategyProvider
靜態註冊表類春季
流是
MessageDispatcher
- >new ABTask()
- >StrategyProvider.get()
public class ABTask implements Runnable{
public ABTask(StrategyProvider provider){
this.provider = provider
}
public void run(){
//need to use StrategyProvider here
}
}
public class MessageDispatcher{
private final StrategyProvider provider;
public void handleMsg(){
//I don't want to pass provider from here
new ABTask(provider)
}
}
立即訪問StrategyProvider
我將不得不因爲我使用Spring Dependency Injection
從MessageDispatcher
到ABTask
通過它的實例。雖然通過這樣做,我正在爲MessageDispatcher
課增加噪音。所以我想知道有沒有什麼辦法靜態訪問此提供程序,甚至露出提供商方法爲靜態,這樣我可以從ABTask
按如下方式使用它:
public void run(){
StrategyProvider.get(args)
}
請不要建議改變MessageDispatcher類。其他想法是受歡迎的。
嗯「雖然通過這樣做,我將噪聲加入'MessageDispatcher'類」如果'MessageDispatcher'取決於'Strategy'那麼我們就必須在這個類被注入,所以我不會在這裏看到任何噪音的依賴 – niceman
@niceman'MessageDispacther'不取決於'Strategy',其'ABTask'需要它。 – Sikorski
hmm true,你不能將'Strategy'傳遞給'ABTask'構造函數嗎?或者你希望'ABTask'在運行時改變其'Strategy'? – niceman