데코레이터 패턴

개체에 동적으로 추가 책임을 부여합니다. 데코레이터는 기능 확장을 위해 서브클래싱에 대한 유연한 대안을 제공합니다.

참가자들


  • 구성 요소: 책임을 동적으로 추가할 수 있는 개체에 대한 인터페이스를 정의합니다.
  • ConcreteComponent: 추가 책임을 부여할 수 있는 개체를 정의합니다.
  • 데코레이터: 구성 요소 개체에 대한 참조를 유지하고 구성 요소의 인터페이스를 준수하는 인터페이스를 정의합니다.
  • ConcreteDecorator: 컴포넌트에 책임을 추가합니다.

  • 암호



    public class Main {
    
      public static void main(String[] args) {
        ConcreteComponent c = new ConcreteComponent();
        ConcreteDecoratorA d1 = new ConcreteDecoratorA();
        ConcreteDecoratorB d2 = new ConcreteDecoratorB();
        d1.setComponent(c);
        d2.setComponent(d1);
        d2.operation();
      }
    }
    
    public interface Component {
      void operation();
    }
    
    public class ConcreteComponent implements Component {
    
      @Override
      public void operation() {
        System.out.println("ConcreteComponent.operation()");
      }
    }
    
    public abstract class Decorator implements Component {
    
      protected Component component;
    
      public void setComponent(Component component) {
        this.component = component;
      }
    
      @Override
      public void operation() {
        if (component != null) {
          component.operation();
        }
      }
    }
    
    public class ConcreteDecoratorA extends Decorator {
    
      private static final String ADDED_STATE = "ConcreteDecoratorA.operation()";
    
      @Override
      public void operation() {
        super.operation();
        System.out.println(ADDED_STATE);
      }
    
    }
    
    public class ConcreteDecoratorB extends Decorator {
    
      @Override
      public void operation() {
        super.operation();
        addedBehavior();
        System.out.println("ConcreteDecoratorB.operation()");
      }
    
      private void addedBehavior() {
        System.out.println("ConcreteDecoratorB.addedBehavior()");
      }
    }
    

    산출



    ConcreteComponent.operation()
    ConcreteDecoratorA.operation()
    ConcreteDecoratorB.addedBehavior()
    ConcreteDecoratorB.operation()
    




    eidherjulian61 / 디자인 패턴






    좋은 웹페이지 즐겨찾기