Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Коли варто використовувати «Адаптер» у проекті?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Патерн «Адаптер»** варто використовувати, коли потрібно **з'єднати несумісні інтерфейси**, тобто змусити працювати разом класи або модулі, які спочатку не були спроєктовані для спільної роботи. **Ключове:** Adapter застосовується, коли потрібно **забезпечити сумісність без модифікації вихідного коду**, виступаючи «перекладачем» між двома світами.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення**Патерн «Адаптер»** варто використовувати, коли потрібно **з'єднати несумісні інтерфейси**: тобто змусити працювати разом класи або модулі, які спочатку не були спроєктовані для спільної роботи. --- ### 1. **Інтеграція старого коду з новою системою** Коли ви модернізуєте систему, а старі компоненти змінювати не можна. Адаптер «перекладає» старий інтерфейс у новий, зберігаючи працездатність без переписування логіки. **Приклад:** Нова система використовує `PaymentService.process()`, а старий модуль - `LegacyPay.runPayment()`. Адаптер реалізує `PaymentService`, усередині викликаючи `LegacyPay.runPayment()`. --- ### 2. **Використання сторонніх бібліотек і API** Якщо зовнішній SDK, бібліотека або API мають **інший інтерфейс**, адаптер дозволяє інтегрувати їх, не змінюючи ні бібліотеку, ні ваш код. **Приклад:** Ви використовуєте зовнішній поштовий сервіс, у якого методи називаються інакше - адаптер підганяє його під ваш внутрішній інтерфейс `EmailSender`. --- ### 3. **Вирівнювання інтерфейсів різних класів** Коли у вас є кілька схожих класів з різними інтерфейсами, але вони повинні використовуватися однаково. Адаптер створює **єдиний контракт взаємодії**. **Приклад:** Класи `XmlDataReader` і `JsonDataReader` приводяться до спільного інтерфейсу `DataReader` через адаптери. --- ### 4. **Робота із застарілими системами або спадщиною** В enterprise-проєктах часто залишаються старі модулі, змінити які дорого або неможливо. Адаптер дозволяє **тимчасово «прикрити» старий код новим інтерфейсом**, зберігши зворотну сумісність. --- ### 5. **Поступовий перехід між архітектурами** Під час міграції з моноліту на мікросервіси, зміни API або переходу на нові формати даних (XML → JSON). Адаптер виступає **тимчасовим мостом**, поки системи не будуть уніфіковані. --- ### 6. **Висновок** Використовуйте **Adapter**, коли: - класи не можна змінити, але їх потрібно поєднати; - інтерфейси відрізняються, але логіка повинна бути спільною; - потрібно зберегти старий код або зовнішні залежності, не порушуючи архітектуру. **Підсумок:** Adapter застосовується, коли потрібно **забезпечити сумісність без модифікації вихідного коду**, він виступає «перекладачем» між двома світами.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.