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

Чем паттерн Proxy отличается от Decorator, если у обоих тот же интерфейс, что и у обёрнутого объекта?

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

Структурно почти одинаковы, различие — в намерении: декоратор добавляет поведение, и цепочку собирает клиент; прокси управляет доступом к объекту (ленивое создание, права, кэш, удалённость, транзакции) и обычно сам создаёт или получает реальный объект, а клиент о прокси не знает.

  • Декораторы: java.io, unmodifiableList
  • Прокси: Spring AOP, Hibernate lazy proxy, RMI-заглушки
  • Прокси может вообще не вызвать реальный объект (кэш, отказ в доступе)

А ещё На собеседовании ценят признание, что граница размыта

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

Подробно

Признай сразу, что структурно они почти неразличимы — оба композиция с делегированием и одинаковым интерфейсом, — и переводи разговор на намерение. Декоратор про «и ещё вот это»: клиент сам собирает цепочку обёрток, каждая добавляет аспект — java.io с BufferedInputStream, Collections.unmodifiableList. Прокси про «пущу или не пущу и когда создам»: он контролирует доступ, часто сам создаёт реальный объект лениво, и клиент может о нём не знать — java.lang.reflect.Proxy, ленивые прокси Hibernate, прокси Spring AOP для @Transactional. Заверши практическими следствиями — self-invocation и ограничения CGLIB.

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

  • Намерение каждого.
  • Кто собирает обёртку.
  • Примеры.

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

  • Пытаться развести паттерны по структуре кода вместо намерения.
  • Забывать, что у прокси есть разновидности: виртуальный, защитный, удалённый, кэширующий.

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

  • Почему @Transactional не срабатывает при вызове изнутри класса?
  • Что общего у прокси с Chain of Responsibility в фильтрах?

Разбор темы

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

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

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

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

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