Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «У чому відмінність «Адаптера» від простого wrapper-класу?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Головна відмінність між **Adapter** і **wrapper-класом (обгорткою)** полягає в **призначенні** та **рівні абстракції**: усі адаптери - це обгортки, але **не кожна обгортка є адаптером**. **Ключове:** Adapter зазвичай **змінює інтерфейс** (реалізує цільовий і викликає адаптований), тоді як Wrapper **зберігає той самий інтерфейс**, просто додаючи логіку навколо викликів.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняГоловна відмінність між **Adapter** і **wrapper-класом (обгорткою)** полягає в **призначенні** та **рівні абстракції**: усі адаптери - це обгортки, але **не кожна обгортка є адаптером**. --- ### 1. **Мета** - **Adapter** вирішує **архітектурну задачу сумісності інтерфейсів**: дозволяє об'єкту з «непідходящим» інтерфейсом працювати там, де очікується інший. - **Wrapper** просто **додає функціональність** навколо наявного об'єкта (наприклад, логування, валідацію, кешування), не змінюючи інтерфейс. **Приклад:** - Adapter: перетворює `playMP3()` на `play(String file)`: «перекладає» інтерфейс. - Wrapper: додає логування до `play(String file)`: «розширює» поведінку. --- ### 2. **Інтерфейс** - **Adapter** зазвичай **змінює інтерфейс**: реалізує один (цільовий) інтерфейс і викликає методи іншого (адаптованого). - **Wrapper** **зберігає той самий інтерфейс**, просто обгортає виклики додатковою логікою. **Приклад (Adapter):** ```java class MediaAdapter implements MediaPlayer { private OldPlayer player = new OldPlayer(); public void play(String file) { player.startPlayback(file); } } ``` **Приклад (Wrapper):** ```java class LoggingMediaPlayer implements MediaPlayer { private MediaPlayer wrapped; public void play(String file) { System.out.println("Start playing " + file); wrapped.play(file); } } ``` --- ### 3. **Контекст використання** | Критерій | Adapter | Wrapper | |---|---|---| | Мета | Сумісність інтерфейсів | Розширення поведінки | | Змінює інтерфейс | Так | Ні | | Приклад застосування | Інтеграція старого і нового коду | Додавання логування, кешування | | Рівень | Архітектурний | Поведінковий | --- ### 4. **Висновок** Adapter - це **«перекладач інтерфейсів»**, що забезпечує сумісність. Wrapper - це **«декоратор поведінки»**, що додає нові можливості без зміни контракту. Тобто Adapter потрібен, щоб **з'єднати несумісне**, а Wrapper, щоб **підсилити вже сумісне**.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.