본문 바로가기

Study

프록시 패턴 & 데코레이터 패턴

중요 구현체는 거의 비슷

 

프록시 패턴은

클라이언트 > 프록시 > 서버

 

데코레이터 패턴은

클라이언트 > 데코레이터 > 서버
클라이언트 > 데코레이터1 > 데코레이터2 > 서버

 

으로 유사하지만

 

의도가 다르다

프록시패턴은 접근에 대한 제어

호출부분에 값이 있거나 없거나 혹은 접근이 가능하거나 불가능하거나에 따라서 실제객체를 호출할지 혹은 프록시에서 이미 기억하고있는 처리를 할것인지에 대한 부분을 구현한다

 

데코레이터패턴은

호출부분에 결과값을 더한다던가 뺀다던가 혹은 다른 부가기능을 추가한다던가 해서 사용하는데 여러 데코레이터를 연속적으로 호출하게끔 하는 의도를 가진다.

 

중요부분

클라이언트는 서버에게 요청할 때 서버의 구현체에 의존하지 않고 인터페이스에만 의존하게 구현후

각 프록시와 데코레이터를 서버의 인터페이스를 그대로 구현후 내부에서 실제 객체를 구현하는 형태

클라이언트가 서버를 실행하는 시점에는 이것이 프록시 혹은 데코레이터가 실행하는 것이 될 수 있다.

 

@Test
void proxyTest() {
    RealSubject realSubject = new RealSubject(); // 실제 서버
    CacheProxy cacheProxy = new CacheProxy(realSubject); // 캐시 프록시는 캐싱처리 or 실제서버 호출
    ProxyPatternClient client = new ProxyPatternClient(cacheProxy); //클라이언트는 캐시프록시를 요청
    client.execute();
    client.execute();
    client.execute();
}

 

@Test
void decorator2() {
    Component component = new RealComponent(); //실제 서버
    TimeDecorator timeDecorator = new TimeDecorator(component); // 실제 서버 동작하는 동안 시간 기록
    MessageDecorator decorator = new MessageDecorator(timeDecorator); // 실제 서버 동작하는 결과에 값 더함
    DecoratorPatternClient client = new DecoratorPatternClient(decorator); // 클라이언트는 데코레이터를 통한 호출
    client.execute();
}

 

'Study' 카테고리의 다른 글

Cglib dynamic proxy  (0) 2022.10.05
JDK Dynamic Proxy  (0) 2022.09.30
인터페이스 기반 vs 구체 클래스 기반 프록시  (0) 2022.09.29
프록시  (0) 2022.09.21
템플릿 메소드 패턴  (0) 2022.09.11