Получить доступ

По какому признаку проще всего отличить Adapter от Decorator и Proxy?

MiddleПаттерны проектирования
Коротко

По интерфейсу: адаптер меняет интерфейс (InputStreamReader превращает байтовый поток в символьный), декоратор и прокси сохраняют его. Механизм у всех трёх один — композиция и делегирование, различие в намерении.

  • Адаптер — совместимость
  • Декоратор — добавить поведение, клиент собирает цепочку
  • Прокси — управлять доступом: ленивость, права, транзакции

А ещё Фасад тоже обёртка, но над целой подсистемой

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Механизм у всех трёх один — композиция и делегирование, поэтому различать надо по намерению. Адаптер решает задачу совместимости: интерфейс на выходе отличается от интерфейса обёрнутого объекта (InputStreamReader превращает байтовый поток в символьный). Декоратор сохраняет интерфейс и добавляет поведение (BufferedInputStream). Прокси сохраняет интерфейс и контролирует доступ (Hibernate lazy loading, Spring AOP).

Что хотят услышать

  • Критерий интерфейса.
  • Намерение каждого.

Частые ошибки

  • Различать эти паттерны по коду, а не по намерению — код у них похож.
  • Считать, что адаптер обязательно использует наследование: обычно это тоже композиция.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Адаптер меняет интерфейс, а декоратор и прокси его сохраняют
  • ✗Адаптер использует наследование, а декоратор и прокси — композицию
  • ✗Адаптер создаётся во время компиляции, а остальные — в рантайме
  • ✗Адаптер может обернуть только один объект, остальные — несколько

Что спросят дальше

  • Чем прокси отличается от декоратора, если интерфейс у обоих одинаковый?
  • К какому паттерну относится Arrays.asList?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем