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