Рубрики
Без рубрики

Шаблон Декоратора

Динамически прикрепляйте дополнительные обязанности к объекту. Декораторы предоставляют гибкую альтернативу… С тегами structural, pattern, design patterns, java.

Динамически прикрепляйте дополнительные обязанности к объекту. Декораторы предоставляют гибкую альтернативу подклассам для расширения функциональности.

  • Компонент: определяет интерфейс для объектов, к которым могут динамически добавляться обязанности.
  • 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/дизайн-шаблоны

Основные шаблоны Проектирования

ид ・ 27 сентября ・ 1 минута чтения

Оригинал: “https://dev.to/eidher/decorator-pattern-2gmp”