참고 1. 스프링-핵심-원리-고급편, 김영한
참고 2. 위키백과
데코레이터 패턴의 전체적인 틀은 프록시 패턴과 동일하다.
1. Component 인터페이스
실제 객체와 부가 기능 추가를 위한 데코레이터의 인터페이스를 정의한다.
public interface Component {
String operation();
}
2. 실제 서버에 대한 객체
실제 서버에 대한 객체를 정의한다.
@Slf4j
public class RealComponent implements Component{
@Override
public String operation() {
log.info("RealComponent 실행");
return "data";
}
}
3. Decorator 정의
위 실제 서버를 주입받고, 해당 서버에 추가할 부가 기능에 대한 데코레이터를 정의한다. 아래의 데코레이터는 위 실제 서버 컴포넌트를 주입받고, 문자열을 변경하는 부가 기능을 추가한다.
@Slf4j
public class MessageDecorator implements Component {
private Component component;
public MessageDecorator(Component component) {
this.component = component;
}
@Override
public String operation() {
log.info("MessageDecorator 시작");
String result = component.operation();
String decoResult = "****" + result + "****";
log.info("MessageDeco 적용전={}, 적용후={}", result, decoResult);
return decoResult;
}
}
데코레이터 적용 예시
@Slf4j
public class DecoratorPatternTest {
@Test
void noDecorator() {
Component realComponent = new RealComponent();
DecoratorPatternClient client = new DecoratorPatternClient(realComponent);
client.execute();
}
@Test
void Decorator() {
Component realComponent = new RealComponent();
Component MessageDeco = new MessageDecorator(realComponent);
DecoratorPatternClient client = new DecoratorPatternClient(MessageDeco);
client.execute();
}
}
'스프링' 카테고리의 다른 글
[Spring] 디자인 패턴 - 프록시 패턴(데코레이터 패턴) (0) | 2024.04.15 |
---|---|
[Spring] 디자인 패턴 - 템플릿 콜백 패턴 (0) | 2024.04.10 |
[Spring] 디자인 패턴 - 전략 패턴 개선하기 (0) | 2024.04.09 |
[Spring] 디자인 패턴 - 전략 패턴 (0) | 2024.04.09 |
[Spring] 디자인 패턴 - 템플릿 메서드 패턴 (0) | 2024.04.08 |