Декоратор — это структурный паттерн проектирования, который позволяет динамически добавлять новое поведение к объектам, оборачивая их в специальные объекты-декораторы.
Основные принципы:
- Декораторы имеют тот же интерфейс, что и объект, который они декорируют.
- Декоратор содержит ссылку на декорируемый объект.
- Запросы к декоратору перенаправляются декорируемому объекту, при этом декоратор может выполнить дополнительные действия до или после вызова оригинального метода.
Преимущества:
- Гибкость: можем комбинировать различные декораторы для получения нужного поведения.
- Избегаем разрастания иерархии классов, как при наследовании.
- Поведение добавляется во время выполнения.
Недостатки:
- Усложнение структуры кода, когда используется много декораторов.
- Может быть сложно удалить специфический декоратор из стека.
Пример (Java):
Допустим, у нас есть интерфейс Coffee
и его реализация SimpleCoffee
. Мы хотим добавить к кофе молоко и сахар. Вместо создания классов типа MilkCoffee
, SugarCoffee
, MilkSugarCoffee
, мы используем декораторы.
java
Декоратор — это структурный паттерн проектирования, который позволяет динамически добавлять новое поведение к объектам, оборачивая их в специальные объекты-декораторы.
Основные принципы:
- Декораторы имеют тот же интерфейс, что и объект, который они декорируют.
- Декоратор содержит ссылку на декорируемый объект.
- Запросы к декоратору перенаправляются декорируемому объекту, при этом декоратор может выполнить дополнительные действия до или после вызова оригинального метода.
Преимущества:
- Гибкость: можем комбинировать различные декораторы для получения нужного поведения.
- Избегаем разрастания иерархии классов, как при наследовании.
- Поведение добавляется во время выполнения.
Недостатки:
- Усложнение структуры кода, когда используется много декораторов.
- Может быть сложно удалить специфический декоратор из стека.
Пример (Java):
Допустим, у нас есть интерфейс Coffee
и его реализация SimpleCoffee
. Мы хотим добавить к кофе молоко и сахар. Вместо создания классов типа MilkCoffee
, SugarCoffee
, MilkSugarCoffee
, мы используем декораторы.
java