Паттерны

Расскажите про паттерн «Декоратор» (Decorator)


Паттерн «Декоратор» (Decorator) относится к структурным паттернам проектирования и используется для динамического добавления новых функций или поведения существующим объектам без изменения их основной структуры. Основная идея паттерна «Декоратор» заключается в создании класса-декоратора, который оборачивает и расширяет функциональность другого класса, но при этом сохраняет его интерфейс. Декоратор предоставляет гибкую альтернативу наследованию, позволяя добавлять новые функции динамически во время выполнения. Пример реализации паттерна «Декоратор» на языке Java: // Интерфейс, предоставляющий базовую функциональность public interface Component { void operation(); } // Конкретный класс, реализующий интерфейс Component public class ConcreteComponent implements Component { @Override public void operation() { System.out.println("Выполнение базовой операции"); } } // Абстрактный класс декоратора public abstract class Decorator implements Component { protected Component component; public Decorator(Component component) { this.component = component; } @Override public void operation() { component.operation(); } } // Конкретный класс декоратора, добавляющий новую функциональность public class ConcreteDecorator extends Decorator { public ConcreteDecorator(Component component) { super(component); } @Override public void operation() { super.operation(); additionalOperation(); } private void additionalOperation() { System.out.println("Выполнение дополнительной операции"); } } В данном примере у нас есть интерфейс Component, который предоставляет базовую функциональность. Класс ConcreteComponent реализует этот интерфейс и предоставляет реализацию базовой операции. Абстрактный класс Decorator является базовым классом для всех декораторов. Он содержит ссылку на объект типа Component и делегирует вызовы операций этому объекту. Конкретный класс ConcreteDecorator является расширением Decorator и добавляет дополнительную функциональность, выполняя дополнительную операцию после выполнения базовой операции. Теперь мы можем использовать декораторы для расширения функциональности объектов. Например: Component component = new ConcreteComponent(); Component decoratedComponent = new ConcreteDecorator(component); component.operation(); // Выполнение базовой операции decoratedComponent.operation(); // Выполнение базовой операции, а затем выполнение дополнительной операции Паттерн «Декоратор» позволяет добавлять новую функциональность объектам динамически, не изменяя их основной структуры. Это обеспечивает гибкость и позволяет создавать различные комбинации функциональности.


Копировать ссылку