名单
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