참고 1. 스프링-핵심-원리-고급편, 김영한
이전 전략 패턴은 아래와 같이 새로운 Strategy마다 Context를 새로 생성해야 했다.
Strategy strategy1 = new Strategy();
Context context1 = new Context(strategy1); //Context1 생성
context1.execute();
Strategy strategy2 = new Strategy();
Context context2 = new Context(strategy2); //Context2 생성
context2.execute();
이번에는 Context의 Strategy를 생성자 주입이 아닌 파라미터로 주입받는 방법으로 개선해보자. 이렇게 파라미터 방식으로 주입받을 경우 각 Strategy마다 새로운 Context를 생성하지 않고, 하나의 Context에 각 Strategy를 파라미터로 주입해 재상용할 수 있다.
Context 정의
public class ContextV2 {
public void execute(Strategy strategy) {
System.out.println("start");
strategy.call();
System.out.println("end");
}
}
사용 예시
void strategy() {
Context context = new Context();
context.execute(new Strategy1());
context.execute(new Strategy2());
//Lambda 예시
context.execute(() -> {
System.out.println("Logic~");
}
}
'스프링' 카테고리의 다른 글
[Spring] 디자인 패턴 - 프록시 패턴(데코레이터 패턴) (0) | 2024.04.15 |
---|---|
[Spring] 디자인 패턴 - 템플릿 콜백 패턴 (0) | 2024.04.10 |
[Spring] 디자인 패턴 - 전략 패턴 (0) | 2024.04.09 |
[Spring] 디자인 패턴 - 템플릿 메서드 패턴 (0) | 2024.04.08 |
[Spring] 동시성 문제 - ThreadLocal로 개선 (0) | 2024.04.07 |