이전 까지는 미리 문맥 객체의 필드에 전략객체를 넣어 사용했다.
이번엔 아예 인자로 줄 것 이다.
이러면 코드가 훨씬 깔끔해 진다.
@Slf4j
public class ContextV2 {
public void execute(Strategy strategy){
long startTime = System.currentTimeMillis();
// 비즈니스 로직
strategy.call();
long endTime = System.currentTimeMillis();
long resultTime = endTime - startTime;
log.info("resultTime={}", resultTime);
}
}
구현 자체는 이렇고,
@Test
void strategyV2(){
ContextV2 context = new ContextV2();
context.execute(()->log.info("비즈니스 로직 1"));
context.execute(()->log.info("비즈니스 로직 2"));
}
이렇게 사용한다.
Strategy 인터페이스의 메소드는 하나이기 때문에, 저렇게 람다로 해도 인지가 된다.
@Test
void strategyV1(){
ContextV2 context = new ContextV2();
context.execute(new StrategyLogic1());
context.execute(new StrategyLogic2());
}
당연히 이렇게 미리 구현해 놓은 구현체를 넣어줘도 된다.
디자인 패턴은 모양새가 비슷한 것이 많은데,
구분은 하고자 하는 의도로 하면 된다.
'스프링 > 스프링 핵심 원리 - 고급편' 카테고리의 다른 글
25. 템플릿 콜백 패턴 적용 (0) | 2024.01.17 |
---|---|
24. 템플릿 콜백 패턴 (0) | 2024.01.17 |
22. 전략 패턴 익명 및 람다 (0) | 2024.01.17 |
21. 전략 패턴 (0) | 2024.01.17 |
20. 템플릿 메서드 패턴 적용 (0) | 2024.01.15 |