데코레이터 패턴은 이름에 나와있듯이 원본에 장식을 더하는 패턴이다.
데코레이터 패턴은 프록시 패턴과 구현 방법이 같다. 다만 프록시 패턴은 클라이언트가 최종적으로 돌려 받는 반환값을 조작하지 않고 그대로 전달하는 반면 데코레이터 패턴은 클라이언트가 받는 반환값에 장식을 덧입힌다.
public interface IService {
public abstract String runSomething();
}
public class Service implements IService{
@Override
public String runSomething() {
return " 서비스 짱!!";
}
}
public class Decorator implements IService{
IService service;
public String runSomething(){
System.out.println("호출에 대한 장식 주목적, 클라이언트에게 반환 결과에 장식 더해 전달");
service = new Service();
return "정말" + service.runSomething();
}
}
public class ClientWithDecorator {
public static void main(String[] args) {
IService Decorator = new Decorator();
System.out.println(Decorator.runSomething());
}
}
호출에 대한 장식 주목적, 클라이언트에게 반환 결과에 장식 더해 전달
정말 서비스 짱!!
실행 결과에서 알 수 있듯이 서비스의 서비스 짱
결과에 호출에 대한 장식 주목적, 클라이언트에게 반환 결과에 장식 더해 전달
문자열을 데코레이팅해 출력한다.
final
클래스는 상속 즉, 확장이 불가능하다. final
클래스를 재사용하려면 데코레이터 패턴을 사용해 클래스를 자체 래퍼로 래핑한다.디자인 패턴에 뛰어들기
스프링 입문을 위한 객체지향의 원리와 이해