Какова точная разница между шаблонами адаптера и прокси?

Как я понял, шаблоны Adapter и Proxy делают два разных / разных класса / объекта совместимыми для взаимодействия друг с другом. И оба они являются структурными схемами. Я понимаю, что они оба очень похожи друг на друга.

Может кто-нибудь объяснить, что именно делает их (их) разными?

РЕДАКТИРОВАТЬ: я прошел через этот вопрос. Но я бы предпочел провести тщательное сравнение между адаптером и прокси.

4 ответа

Решение

адаптер:

  1. Это позволяет двум несвязанным интерфейсам работать вместе через разные объекты, возможно, играя одну и ту же роль.
  2. Это изменяет оригинальный интерфейс.

UML-диаграмма:

введите описание изображения здесь

Вы можете найти более подробную информацию об этом шаблоне с примером рабочего кода в этом сообщении SE:

Разница между образцом моста и образцом адаптера

Прокси - сервер:

Прокси-сервер предоставляет суррогат или заполнитель для другого объекта для контроля доступа к нему.

UML-диаграмма:

введите описание изображения здесь

Есть общие ситуации, в которых применяется шаблон Proxy.

  1. Виртуальный прокси - это заполнитель для "дорогих в создании" объектов. Реальный объект создается только тогда, когда клиент впервые запрашивает / получает доступ к объекту.
  2. Удаленный прокси-сервер предоставляет локального представителя для объекта, который находится в другом адресном пространстве. Это то, что обеспечивает код заглушки в RPC и CORBA.
  3. Защитный прокси-сервер контролирует доступ к чувствительному главному объекту. "Суррогатный" объект проверяет, что у вызывающей стороны есть права доступа, требуемые до пересылки запроса.
  4. Интеллектуальный прокси-сервер обеспечивает сложный доступ к определенным объектам, например отслеживание количества ссылок на объект и отказ в доступе при достижении определенного числа, а также загрузка объекта из базы данных в память по требованию.

Для рабочего кода, посмотрите статью tutorialspoint по Прокси.

Ключевые отличия:

  1. Адаптер предоставляет другой интерфейс для своей темы. Прокси предоставляет тот же интерфейс
  2. Адаптер предназначен для изменения интерфейса существующего объекта.

Вы можете найти более подробную информацию об этих шаблонах в статьях создания исходного кода статей прокси и адаптеров.

Другие полезные статьи: прокси по dzone

Отсюда:

Адаптер предоставляет другой интерфейс для своей темы. Прокси предоставляет тот же интерфейс.

Вы можете подумать об адаптере как о чем-то, что должно приспособить одну вещь к другой, которая несовместима при непосредственном подключении. Например, когда вы путешествуете за границей, вам нужен адаптер электрической розетки.

Теперь Proxy - это объект того же интерфейса и, возможно, того же базового класса (или подкласса). Он только "притворяется" (и ведет себя как) фактическим объектом, но вместо этого перенаправляет фактическое поведение (вычисления, обработку, доступ к данным и т. Д.) В базовый объект, на который ссылаются.

Экстраполируя на электрическую аналогию, было бы хорошо, если бы использование адаптера было видимым для клиента, то есть клиент "знает", что используется адаптер, в то время как использование прокси-сервера чаще может быть скрыто или " прозрачный " - клиент считает, что используется реальный объект, но это только прокси.

На практике понятия обертки, адаптера и прокси -сервера настолько тесно связаны, что эти термины используются взаимозаменяемо.

  • Как следует из названия, оболочка — это буквально то, что оборачивает другой объект или функцию. например, функция, которая вызывает другую функцию, или объект, который управляет жизненным циклом другого объекта и пересылает запросы и ответы.

  • Адаптер буквально адаптирует контракт. Обычно это относится к изменению интерфейса объекта или изменению сигнатуры метода. И в обоих случаях это можно сделать, только обернув его другим объектом или функцией.

  • Слово « прокси » используется для точно таких же целей. Однако в некоторых источниках он будет использоваться более явно для ссылки на адаптер для доступа к удаленному ресурсу. По сути, это означает, что локальные вызовы будут перенаправляться на удаленный объект . И может показаться естественным определить общий интерфейс, который затем можно совместно использовать/повторно использовать как локально, так и удаленно для этих объектов.

Примечание. Последняя интерпретация шаблона прокси больше не актуальна. Такой подход имел смысл во времена, когда такие технологии, как CORBA , были на пике популярности. Если у вас есть доступ к удаленной службе, имеет смысл четко определить объекты Request, Response и Context и использовать такие технологии, как OpenAPI или XSD.

Разница между шаблоном адаптера и шаблоном прокси

АДАПТЕР ШАБЛОН

  1. Индийское мобильное зарядное устройство (CLIENT) не подходит для распределительной платы США (SERVER).
  2. Вам нужно использовать адаптер, чтобы индийское мобильное зарядное устройство (КЛИЕНТ) могло поместиться в коммутационной панели США (СЕРВЕР).
  3. Из пункта 2 вы можете понять, что КЛИЕНТ связывается с адаптером напрямую. Затем адаптер связывается с сервером.

ПРОКСИ

  • В шаблоне адаптера клиент напрямую связывается с адаптером. Он не связывается с сервером.
  • В шаблоне прокси прокси и сервер реализуют один и тот же интерфейс. Клиент будет вызывать тот же интерфейс.

ПОНИМАНИЕ ЧЕРЕЗ КОД

class client{
    public void main(){
      //proxy pattern
      IServer iserver = new proxy();
      iserver.invoke();

      //adapter pattern
      IAdapter iadapter = new adapter();
      iserver.iadapter();
    }
}

class server implements IServer{
    public void invoke(){}
}

class proxy implments IServer{
  public void invoke(){}
}

class adapter implements IAdapter{
  public void invoke(){}
}

Ссылка: Разница между шаблоном адаптера и шаблоном прокси

Другие вопросы по тегам