Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Які типи адаптерів існують?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Існує три основних типи адаптерів: **класовий**, **об'єктний** і **двосторонній**. Кожен реалізує ідею сумісності по-своєму. **Ключове:** об'єктний адаптер, побудований на композиції, є найпоширенішим варіантом (Java, C#, Python), бо він гнучкіший і менш зв'язаний з конкретним класом, ніж класовий адаптер.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняІснує три основних типи адаптерів: **класовий**, **об'єктний** і **двосторонній**. Кожен реалізує ідею сумісності по-своєму. --- ### 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 | Переваги | Недоліки | |---|---|---|---|---| | Класовий | Успадкування | Жорсткий | Швидше, простіше | Негнучкий, вимагає множинного успадкування | | Об'єктний | Композиція | Посилання | Гнучкий, безпечний | Повільніше, більше коду | | Двосторонній | Обидві сторони | Взаємний | Універсальний | Складний у реалізації | **Підсумок:** Класовий - швидкий, але жорсткий. Об'єктний - гнучкий і безпечний (найпоширеніший). Двосторонній - універсальний, але складний.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.