Skip to main content

Що робить патерн Bridge?

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 відокремлює "що робить об'єкт" (абстракцію) від "як він це робить" (реалізацію), перетворюючи їх на дві незалежні та легко комбіновані ієрархії, що підвищує гнучкість і масштабованість системи.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.