Какая разница между шаблонами адаптера и прокси?
Как я понял, оба шаблона Адаптер и Прокси делают два разных/разных класса/объекта совместимыми с каждым для общения. И оба они Структурные шаблоны. Я получаю, что оба они очень похожи друг на друга.
Может кто-нибудь объяснить, что именно делает их разными?
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(){}
}
Ссылка: Разница между шаблоном адаптера и шаблоном прокси