Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «У чому сенс розділення абстракції та реалізації в патерні Bridge?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Сенс розділення **абстракції** та **реалізації** в патерні **Bridge** полягає в тому, щоб **позбавити систему жорсткої зв'язаності** між ними і дозволити **змінювати обидві сторони незалежно**. **Ключове:** абстракція містить посилання на інтерфейс реалізації, а не на конкретний клас, тому можна вільно комбінувати різні абстракції з різними реалізаціями без нових класів.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)ЗображенняСенс розділення **абстракції** та **реалізації** в патерні **Bridge** полягає в тому, щоб **позбавити систему жорсткої зв'язаності** між ними і дозволити **змінювати обидві сторони незалежно**. --- ### 1. **Без Bridge: жорсткий зв'язок** Коли абстракція і реалізація об'єднані в одному класі, будь-яка зміна способу реалізації вимагає зміни й в абстракції. Наприклад, якщо є класи `RemoteForTV`, `RemoteForRadio`, `AdvancedRemoteForTV`, `AdvancedRemoteForRadio`, то під час додавання нового пристрою або типу пульта доводиться **додавати нові комбінації класів**. Це роздуває кількість коду. --- ### 2. **З Bridge: дві незалежні ієрархії** Bridge розриває цей зв'язок: - **Абстракція** визначає *що робить система* (наприклад, «Пульт»). - **Реалізація** визначає *як саме це виконується* (наприклад, «Телевізор», «Радіо»). Абстракція містить **посилання на інтерфейс реалізації**, а не на конкретний клас. Тепер можна вільно комбінувати: `SimpleRemote + TV`, `AdvancedRemote + Radio`, `VoiceRemote + Projector` - без нових класів. --- ### 3. **Навіщо це потрібно** - **Гнучкість:** можна змінювати реалізацію (наприклад, інший драйвер, інший API) без зміни абстракції. - **Масштабованість:** легко додавати нові типи абстракцій або реалізацій. - **Підтримка принципу відкритості/закритості (OCP):** нові можливості додаються через розширення, а не переписування. --- ### 4. **Приклад** ```java // Абстракція abstract class Remote { protected Device device; Remote(Device device) { this.device = device; } abstract void togglePower(); } // Реалізація interface Device { void turnOn(); void turnOff(); } // Дві незалежні лінії розвитку class TV implements Device { ... } class Radio implements Device { ... } class AdvancedRemote extends Remote { ... } ``` Тепер можна підключити будь-який `Device` до будь-якого `Remote` - без дублювання коду. --- ### 5. **Висновок** Розділення абстракції та реалізації в патерні **Bridge** усуває **жорстку зв'язаність** між ними і дозволяє розвивати кожну частину незалежно. Підсумок - **гнучка, розширювана і чиста архітектура**, де додавання нових пристроїв або функцій не вимагає каскадних змін.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.