Різниця між шаблоном адаптера та схемою проксі?


33

Наскільки зрозуміло, модель адаптера - це створення об’єкта обгортки для нашого реального об'єкта, що цікавить, просто ще один рівень опосередкованості, який забезпечує гнучкість. гнучкість полягає в тому, що якщо змінюється інтерфейс реального об'єкта, ми змінюємо інтерфейс обгортки, що вказує на реальний об'єкт, залишаючи інтерфейс, що піддається клієнту, незмінним.

The Проксі шаблон такий же, з тією різницею , що кожен проксі - обгортка забезпечує тільки когерентне підмножина функцій реального об'єкта. Чому це було б корисно, коли ми прагнемо зробити «один клас з однією метою» - це поза мною.

Я правильно це зрозумів?

Відповіді:


55

Не зовсім.

Основна мета шаблону адаптера - змінити інтерфейс класу / бібліотеки А на очікування клієнта B. Типовою реалізацією є обгортковий клас або набір класів. Метою є не спрощення майбутніх змін інтерфейсу, а поточна несумісність інтерфейсу.

Проксі модель також використовує обгортки класів, але і для різних цілей. Мета шаблону проксі - створити режим очікування для реального ресурсу. Причини використання проксі-сервера можуть бути

  • Реальний ресурс знаходиться на віддаленому комп'ютері (проксі сприяє взаємодії з віддаленим ресурсом)
  • Справжній ресурс створити дорого (проксі-сервер гарантує, що вартість не виникає, якщо / поки дійсно не потрібно)

Найголовніше те, що проксі забезпечує резервну заміну реального ресурсу, для якого він є резервним, тому він повинен забезпечувати той самий інтерфейс.


Перш за все, дякую за чудову відповідь. Чи реалізує проксі всі інтерфейси, необхідні поточному клієнту, або він реалізує всі інтерфейси, які надає фактичний ресурс?
Vorac

1
@Vorac: Це залежить від складності інтерфейсу та вашої філософії дизайну. І те й інше можливо, але якщо інтерфейс великий / складний або ви сильно вірите в YAGNI, то має сенс реалізувати лише те, що вам потрібно.
Барт ван Інген Шенау

Отже, враховуючи, що шаблон "Адаптер" використовує класи обгортки, чи є шаблон "Адаптер" проксі-схемою?
moonman239

@ moonman239: Ні, тому що намір використовувати клас обгортки різний. Тільки тому, що дві схеми схожі на діаграмі класів, не означає, що вони пов'язані або реалізують один одного. Основним фактором для різних моделей є їх наміри.
Барт ван Інген Шенау

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.