PassFront
  1. PassFront
  2. База знаний
  3. Структурные паттерны

Чем Adapter отличается от Facade и Proxy?

Структурные паттерны

Все трое оборачивают объект, но с разной целью: Adapter меняет интерфейс на нужный клиенту, Facade упрощает интерфейс целой подсистемы, Proxy сохраняет интерфейс и контролирует доступ к объекту.

Adapter

Стыкует несовместимое: клиент ждёт pay(rubles), сторонняя библиотека даёт make_payment(cents) — адаптер переводит вызовы. Бывает объектный (через композицию) и классовый (через наследование).

Facade

Один простой метод video_converter.convert(file) прячет оркестрацию пяти классов подсистемы. Цель — снизить связанность клиента с внутренностями, а не совместимость интерфейсов.

Proxy

Заместитель с тем же интерфейсом, что у оригинала:

  • virtual — ленивое создание тяжёлого объекта;
  • protection — проверка прав доступа;
  • remote — сетевые вызовы, RPC-стабы; caching — мемоизация ответов.

Разница одной строкой

Adapter — «интерфейс не подходит», Facade — «интерфейс слишком сложен», Proxy — «нужен контроль на пути к объекту».

Коротко для собеседования

Разница этих обёрток в намерении: Adapter подгоняет чужой интерфейс под ожидаемый, Facade даёт один простой вход в сложную подсистему, Proxy сохраняет интерфейс и встаёт на пути к объекту ради ленивости, прав или кеша. Структурно Proxy близок к Decorator, но управляет доступом, а не добавляет обязанности.

Другие вопросы раздела