Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що робить патерн Bridge?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Bridge (Міст)** - це **структурний патерн проєктування**, що **розділяє абстракцію та її реалізацію**, дозволяючи їм **розвиватися незалежно одна від одної**. **Ключове:** абстракція зберігає посилання на інтерфейс реалізації, тому реалізацію можна змінювати або підміняти без зміни абстракції.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення**Bridge (Міст)** - це **структурний патерн проєктування**, що **розділяє абстракцію та її реалізацію**, дозволяючи їм **розвиватися незалежно одна від одної**. --- ### 1. **Основна ідея** Зазвичай абстракція (наприклад, інтерфейс керування) і реалізація (конкретний механізм роботи) пов'язані жорстко: одна зміна тягне за собою іншу. Bridge усуває цей зв'язок: - абстракція містить **посилання на інтерфейс реалізації**, - реалізація може змінюватися або підмінятися **без зміни абстракції**. Так досягається **гнучкість**: можна комбінувати різні абстракції з різними реалізаціями. --- ### 2. **Коли застосовувати** - Коли потрібно розділити **високорівневу логіку** (що робить об'єкт) і **низькорівневу реалізацію** (як саме він це робить). - Коли класів стає занадто багато через комбінацію факторів (наприклад, `Коло + Червоний`, `Квадрат + Синій` тощо). - Коли реалізацію потрібно **змінювати під час виконання**. --- ### 3. **Структура** 1. **Abstraction** - визначає інтерфейс абстракції і зберігає посилання на об'єкт `Implementor`. 2. **RefinedAbstraction** - конкретна версія абстракції, використовує `Implementor`. 3. **Implementor** - інтерфейс реалізації (низькорівневі операції). 4. **ConcreteImplementor** - конкретна реалізація інтерфейсу. --- ### 4. **Приклад (Java)** ```java // Інтерфейс реалізації interface Device { void turnOn(); void turnOff(); void setVolume(int level); } // Конкретна реалізація class TV implements Device { public void turnOn() { System.out.println("TV on"); } public void turnOff() { System.out.println("TV off"); } public void setVolume(int level) { System.out.println("TV volume " + level); } } // Абстракція abstract class Remote { protected Device device; public Remote(Device device) { this.device = device; } abstract void togglePower(); } // Конкретна абстракція class AdvancedRemote extends Remote { private boolean on = false; public AdvancedRemote(Device device) { super(device); } void togglePower() { if (on) device.turnOff(); else device.turnOn(); on = !on; } } ``` Тепер можна легко підмінити реалізацію: ```java Remote remote = new AdvancedRemote(new TV()); remote.togglePower(); // працює з будь-яким пристроєм ``` --- ### 5. **Переваги** - **Незалежність змін**: абстракцію і реалізацію можна розвивати окремо. - **Зменшення кількості класів** (замість безлічі комбінацій створюється дві ієрархії). - Можливість **динамічної підміни реалізації** під час виконання. --- ### 6. **Недоліки** - Ускладнює архітектуру: додається додатковий рівень абстракції. - Вимагає продуманого проєктування інтерфейсів. --- **Підсумок:** Патерн **Bridge** відокремлює "що робить об'єкт" (абстракцію) від "як він це робить" (реалізацію), перетворюючи їх на **дві незалежні та легко комбіновані ієрархії**, що підвищує гнучкість і масштабованість системи.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.