Skip to main content

Які типи адаптерів існують?

Існує три основних типи адаптерів: класовий, об'єктний і двосторонній. Кожен реалізує ідею сумісності по-своєму.


1. Класовий адаптер (Class Adapter)

Реалізується за допомогою успадкування: адаптер успадковує інтерфейс клієнта і водночас успадковує (або реалізує) адаптований клас. Використовується там, де мова підтримує множинне успадкування (наприклад, C++).

Схема: Клієнт → Adapter (успадковує Target і Adaptee) → Adaptee

Особливості:

  • Висока продуктивність (немає делегування).
  • Не можна застосувати, якщо немає множинного успадкування.
  • Жорстка зв'язаність з адаптованим класом.

Приклад (C++):

cpp
class Adapter : public Target, private Adaptee { public: void request() override { specificRequest(); } };

2. Об'єктний адаптер (Object Adapter)

Використовує композицію: адаптер містить всередині посилання на адаптований об'єкт і делегує йому виклики. Це найпоширеніший варіант у Java, C#, Python.

Схема: Клієнт → Adapter (містить Adaptee) → Adaptee

Особливості:

  • Гнучкість: можна адаптувати різні об'єкти під час виконання.
  • Менше зв'язаності (адаптер не залежить від конкретного класу).
  • Трохи вищі накладні витрати через делегування.

Приклад (Java):

java
class Adapter implements Target { private Adaptee adaptee = new Adaptee(); public void request() { adaptee.specificRequest(); } }

3. Двосторонній адаптер (Two-Way Adapter)

Дозволяє взаємну сумісність: клієнт може працювати і через інтерфейс Target, і через Adaptee. Тобто один і той самий адаптер уміє перетворювати виклики в обидва боки.

Використовується:

  • при інтеграції двох старих систем, де обидві сторони потрібно «подружити»;
  • у мережевих протоколах, API-шлюзах, драйверах.

Особливості:

  • Складніша реалізація.
  • Часто застосовується на рівнях middleware та в двонаправлених інтерфейсах.

4. Висновок

Тип адаптераПринципЗв'язок з AdapteeПеревагиНедоліки
КласовийУспадкуванняЖорсткийШвидше, простішеНегнучкий, вимагає множинного успадкування
Об'єктнийКомпозиціяПосиланняГнучкий, безпечнийПовільніше, більше коду
ДвостороннійОбидві сторониВзаємнийУніверсальнийСкладний у реалізації

Підсумок: Класовий - швидкий, але жорсткий. Об'єктний - гнучкий і безпечний (найпоширеніший). Двосторонній - універсальний, але складний.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.