본문

Decorator Pattern

반응형

 

메서드 호출의 반환값에 변화를 주기 위해 중간에 장식자를 두는 패턴

장식자라는 이름에서 느껴지듯 실제 서비스의 반환값을 예쁘게 포장(장식)하는 패턴이 데코레이션 패턴이다.

 

 

이미지 출처: https://sourcemaking.com/design_patterns/decorator

 

 

💡 프록시 패턴과 데코레이터 패턴 비교

→ 프록시 패턴: https://server-engineer.tistory.com/229?category=625272

 프록시 패턴 

제어의 흐름을 변경하거나 별도의 로직 처리를 목적으로 한다. 
클라이언트가 받는 반환값을 특별한 경우가 아니면 변경하지 않는다.

 데코레이터 패턴

클라이언트가 받는 반환값에 장식을 더한다. 

 

 

💡 InterfaceService.java

public interface InterfaceService {
    public abstract String runSomething();
}

 

 

💡 Service.java

public class Service implements InterfaceService {
    public String runSomething() {
        return "TEST PAGE";
    }
}

 

 

💡 Decorator.java

public class Decorator implements InterfaceService {
    InterfaceService service;

    @Override
    public String runSomething() {
        System.out.println("호출에 대한 장식 주목적, 클라이언트에게 반환 결과에 장식을 더하여 전달");

        service = new Service();
        // 장식을 더한다는 것 빼고는 프록시 패턴과 유사하다.
        return "정말 " + service.runSomething();
    }
}

 

 

💡 ClientWithDecolator.java

public class ClientWithDecolator {
    public static void main(String[] args) {
        InterfaceService decorator = new Decorator();
        System.out.println(decorator.runSomething());
    }
}

 

💡 결과

호출에 대한 장식 주목적, 클라이언트에게 반환 결과에 장식을 더하여 전달
정말 TEST PAGE

 

반응형

공유

댓글