Адаптер преобразует интерфейс одного класса в интерфейс, ожидаемый другим классом, предоставляя совместимость между классами с несовместимыми интерфейсами. Изменяет сигнатуру существующих методов для соответствия новому интерфейсу.
Декоратор динамически добавляет новые обязанности объекту, оборачивая его в декоратор. Не изменяет интерфейс декорируемого объекта, а лишь расширяет его функциональность.
| Критерий | Адаптер | Декоратор |
|---|---|---|
| Цель | Совместимость интерфейсов | Расширение функциональности |
| Изменение интерфейса | Да, преобразует один в другой | Нет, сохраняет существующий |
| Структура | Оборачивает адаптируемый объект | Оборачивает декорируемый объект |
| Поведение | Изменяет вызовы к адаптируемому объекту | Добавляет новые действия или изменяет существующие |
| Пример | Преобразование XML в JSON | Добавление логирования к существующему классу |
php