Що робить патерн Bridge?
Bridge (Міст) - це структурний патерн проєктування, що розділяє абстракцію та її реалізацію, дозволяючи їм розвиватися незалежно одна від одної.
1. Основна ідея
Зазвичай абстракція (наприклад, інтерфейс керування) і реалізація (конкретний механізм роботи) пов'язані жорстко: одна зміна тягне за собою іншу. Bridge усуває цей зв'язок:
- абстракція містить посилання на інтерфейс реалізації,
- реалізація може змінюватися або підмінятися без зміни абстракції.
Так досягається гнучкість: можна комбінувати різні абстракції з різними реалізаціями.
2. Коли застосовувати
- Коли потрібно розділити високорівневу логіку (що робить об'єкт) і низькорівневу реалізацію (як саме він це робить).
- Коли класів стає занадто багато через комбінацію факторів (наприклад,
Коло + Червоний,Квадрат + Синійтощо). - Коли реалізацію потрібно змінювати під час виконання.
3. Структура
- Abstraction - визначає інтерфейс абстракції і зберігає посилання на об'єкт
Implementor. - RefinedAbstraction - конкретна версія абстракції, використовує
Implementor. - Implementor - інтерфейс реалізації (низькорівневі операції).
- 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
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.