🎁 Паттерн Decorator (Декоратор)
Decorator — структурный паттерн, который добавляет объектам новое поведение, оборачивая их в объекты-обёртки. Альтернатива наследованию, когда комбинаций поведения много и они меняются в рантайме.
Использование
🔹 Когда нужно добавить поведение объекту, не меняя его класс и не трогая остальные объекты.
🔹 Когда наследование порождает взрывной рост классов из-за комбинаций поведений.
🔹 Когда поведение нужно добавлять и убирать динамически в рантайме.
Преимущества
1️⃣ Гибкость комбинирования поведений
Каждый декоратор делает одно дело. Нужно кеширование + логирование + метрики? Оборачиваете в три слоя в любом порядке. Не нужны метрики — просто не добавляете этот слой.
2️⃣ Единая ответственность
Кеширование живёт в одном классе, логирование — в другом. Каждый декоратор легко читать, тестировать и заменять независимо.
3️⃣ Прозрачность для клиента
Декоратор реализует тот же интерфейс, что и оригинал. Клиентский код не знает, с чем работает — с оригиналом или с обёрткой.
Важный нюанс
Порядок декораторов имеет значение. Метрики снаружи кеша видят кеш-хиты корректно. Метрики внутри — не видят их вообще. Весь пакет java.io в стандартной библиотеке построен на этом паттерне.
Когда не нужен
Если комбинаций нет и поведение статично — обычное наследование проще. В Spring большинство cross-cutting concerns уже закрыто AOP-прокси — дублировать вручную смысла нет.
══════ Навигация ══════
Вакансии • Задачи • Собесы
🐸 Библиотека джависта
#CoreJava
Post #7563
2.58K

- 👍 6
- ❤ 1
- 🔥 1