У чому сенс розділення абстракції та реалізації в патерні Bridge?
Сенс розділення абстракції та реалізації в патерні Bridge полягає в тому, щоб позбавити систему жорсткої зв'язаності між ними і дозволити змінювати обидві сторони незалежно.
1. Без Bridge: жорсткий зв'язок
Коли абстракція і реалізація об'єднані в одному класі, будь-яка зміна способу реалізації вимагає зміни й в абстракції.
Наприклад, якщо є класи RemoteForTV, RemoteForRadio, AdvancedRemoteForTV, AdvancedRemoteForRadio,
то під час додавання нового пристрою або типу пульта доводиться додавати нові комбінації класів.
Це роздуває кількість коду.
2. З Bridge: дві незалежні ієрархії
Bridge розриває цей зв'язок:
- Абстракція визначає що робить система (наприклад, «Пульт»).
- Реалізація визначає як саме це виконується (наприклад, «Телевізор», «Радіо»).
Абстракція містить посилання на інтерфейс реалізації, а не на конкретний клас.
Тепер можна вільно комбінувати:
SimpleRemote + TV, AdvancedRemote + Radio, VoiceRemote + Projector - без нових класів.
3. Навіщо це потрібно
- Гнучкість: можна змінювати реалізацію (наприклад, інший драйвер, інший API) без зміни абстракції.
- Масштабованість: легко додавати нові типи абстракцій або реалізацій.
- Підтримка принципу відкритості/закритості (OCP): нові можливості додаються через розширення, а не переписування.
4. Приклад
// Абстракція
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 усуває жорстку зв'язаність між ними і дозволяє розвивати кожну частину незалежно. Підсумок - гнучка, розширювана і чиста архітектура, де додавання нових пристроїв або функцій не вимагає каскадних змін.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.