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

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

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

EDIT: Я прошел через этот вопрос. Но я бы предпочел бы иметь близкое сравнение между адаптером и прокси.

Ответ 1

Adapter:

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

Диаграмма UML:

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

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

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

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

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

Диаграмма UML:

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

Существуют обычные ситуации, в которых применим шаблон прокси.

  • A виртуальный прокси - владелец места для создания "дорогого создания". Реальный объект создается только тогда, когда клиент сначала запрашивает/обращается к объекту.
  • A удаленный прокси предоставляет локальный представитель для объекта, который находится в другом адресном пространстве. Это то, что обеспечивает код "заглушки" в RPC и CORBA.
  • Защитный прокси контролирует доступ к чувствительному главному объекту. Объект "суррогатный" проверяет, что у вызывающего есть права доступа, необходимые до перенаправления запроса.
  • интеллектуальный прокси обеспечивает сложный доступ к определенным объектам, таким как отслеживание количества ссылок на объект и отказ в доступе, если достигнут определенный номер, а также загрузка объекта из базы данных в память на спрос

Для рабочего кода ознакомьтесь с tutorialspoint статьей о Proxy.

Основные отличия:

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

Более подробную информацию об этих шаблонах можно найти в источниках статей proxy и adapter.

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

Ответ 2

Из здесь:

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

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

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

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

Ответ 3

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

ФОРМАТ АДАПТЕР

  • Индийское мобильное зарядное устройство (CLIENT) не подходит в распределительном щите США (SERVER).
  • Вам необходимо использовать адаптер, чтобы индийское мобильное зарядное устройство (CLIENT) могло поместиться в щит управления США (SERVER).
  • Из пункта 2 вы можете понять, что адаптер CLIENT напрямую связан. Затем сервер контактов адаптера.

PROXY PATTERN

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

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

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(){}
}

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