간단한 예제이다.
데코레이터 패턴 적용전엔 의존관계가 위와 같다. 그냥 단순함.
중간에 프록시를 두고 프록시가 추가 기능을 제공하도록 해보자.
프록시가 추가 기능을 제공하는 패턴을 데코레이터 패턴이라고 한다.
프록시를 만들되 추가 기능을 넣어주면 된다.
@Slf4j
public class MessageDecorator implements Component {
private Component component;
public MessageDecorator(Component component) {
this.component = component;
}
@Override
public String operation() {
log.info("MessageDecorator 실행");
String data = component.operation();
String decoratedData = "*****" + data + "*****"; // 데이터에 장식 추가
log.info("MessageDecorator decoratedData={}", decoratedData);
return decoratedData;
}
}
테스트 해보자.
@Test
void decorator1() {
Component realComponent = new RealComponent();
Component decorator = new MessageDecorator(realComponent);
DecoratorPatternClient decoratorPatternClient = new DecoratorPatternClient(decorator);
decoratorPatternClient.execute();
}
이번에는 데코레이터에 데코레이터를 하나 더 넣어보자.. 프록시는 체인을 만들 수 있다는 점을 이용하는 것임.