데코레이터 예제 v1

간단한 예제이다.

image.png

데코레이터 패턴 적용전엔 의존관계가 위와 같다. 그냥 단순함.

데코레이터 예제 v2

중간에 프록시를 두고 프록시가 추가 기능을 제공하도록 해보자.

프록시가 추가 기능을 제공하는 패턴을 데코레이터 패턴이라고 한다.

프록시를 만들되 추가 기능을 넣어주면 된다.

@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();
    }

image.png

데코레이터 예제 v3

이번에는 데코레이터에 데코레이터를 하나 더 넣어보자.. 프록시는 체인을 만들 수 있다는 점을 이용하는 것임.

image.png