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

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

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

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


person Supun Wijerathne    schedule 08.06.2016    source источник
comment
Возможный дубликат Как прокси, декоратор, адаптер, и паттерны моста отличаются?   -  person michael_j_ward    schedule 08.06.2016
comment
@michael_j_ward Я прошел через это, но мне все равно нужно подробное сравнение этих 2. Спасибо.   -  person Supun Wijerathne    schedule 08.06.2016


Ответы (3)


Адаптер:

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

Диаграмма UML:

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

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

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

Прокси:

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

Диаграмма UML:

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

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

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

Рабочий код можно найти в статье tutorialspoint о прокси.

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

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

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

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

person Ravindra babu    schedule 08.06.2016
comment
Большое спасибо за ваши усилия по улучшению вашего ответа снова и снова :) - person Supun Wijerathne; 09.06.2016
comment
@Ravindrababu Вы говорите, что Адаптер изменяет исходный интерфейс, но, согласно gof и Википедии, он часто используется для того, чтобы существующие классы работали с другими без изменения их исходного кода. пожалуйста, объясните это. - person legend; 22.09.2018

Из здесь:

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

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

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

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

person heltonbiker    schedule 08.06.2016

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

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

  1. Индийское мобильное зарядное устройство (КЛИЕНТ) не подходит для коммутационного щита США (СЕРВЕР).
  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(){}
}

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

person Siddarth Kanted    schedule 25.01.2018