목록
는 SomeStrategyInterface
- 전략 패턴 인터페이스
는 FooStrategy
-SomeStrategyInterface
의 구현은 는 BarStrategy
-SomeStrategyInterface
의 구현은 는 BazStrategy
-SomeStrategyInterface
StrategyProvider
의 구현 - 팩토리 클래스가 제공하는 SomeStrategyInterface
MessageDispatcher
- 메시지 유형의 작업자 스레드에 메시지를 디스패치하는 클래스
ABTask
-> 이제정적 레지스트리 클래스 봄에
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.get()
내가해야 할 것이다 StrategyProvider
에 액세스 할 수 ->new ABTask()
- 구체적인 메시지 유형을 처리하고 필요 작업자 클래스의 유형은 StrategyProvider
흐름은
MessageDispatcher
입니다 Spring Dependency Injection
을 사용하고 있으므로 해당 인스턴스를 MessageDispatcher
에서 ABTask
으로 전달하십시오. 이 작업을 수행하면 MessageDispatcher
클래스에 노이즈가 추가됩니다.
public void run(){
StrategyProvider.get(args)
}
MessageDispatcher 클래스를 변경하는 것이 좋습니다하지 마십시오 : 그래서 궁금해서 다음과 같이 내가 ABTask
에서 사용할 수 있도록 정적으로 제공 방법을 정적이 공급자에 액세스, 심지어 노출 할 수있는 방법이있다. 다른 아이디어도 환영합니다. 스프링 접근법 아래 빈이 autowiring을 통해 얻는 또 다른 빈에서의 StrategyProvider
인스턴스
@Component
public class StrategyFactory {
private static StrategyProvider strategyProvider;
@Autowired
private StrategyProvider provider;
@PostConstruct
public void init() {
StrategyFactory.strategyProvider = provider;
}
public static StrategyProvider getStrategyProvider() {
return strategyProvider;
}
}
작동 일부 정적 메소드를 제공해야 관리로
hmmm "MessageDispatcher'가'Strategy'에 의존하면'MessageDispatcher' 클래스에 잡음을 추가하고 있습니다. 그렇다면 우리는이 클래스에 주입되어야하는 의존성이 있습니다. 그래서 나는 아무런 잡음도 보지 않습니다. – niceman
@niceman'MessageDispacther'는'Strategy'에 의존하지 않고,'ABTask'는 그것을 필요로합니다. – Sikorski
사실, '전략'을 'ABTask'생성자에 전달할 수 없습니까? 또는'ABTask'가 런타임에'Strategy'를 바꾸길 원합니까? – niceman