Патерн Bridge відноситься до структурних паттернів рівня об'єкту.
Якщо для однієї абстракції можливо кілька реалізацій, то зазвичай використовують успадкування. Однак такий підхід не завжди зручний, так як успадкування жорстко прив'язує реалізацію до абстракції, що ускладнює незалежну модифікацію і ускладнює їх повторне використання.
Патерн слід застосовувати, коли у нас є абстракція і кілька її реалізацій. Зрозуміло, немає сенсу відокремлювати абстракцію від реалізації, якщо реалізація може бути тільки одна.
Клас який реалізує виріб, реалізує інтерфейс агрегуючого класу, який підсувається на етапі створення екземпляру класу виробу.
До прикладу у нас є 3 машини і 3 різних двигуна. Кожен двигун підходить до кожної машині, тобто вона реалізує його інтерфейс. Якщо робити це наслідуванням, ми отримаємо 9 різних класів. Виходить у кожної машини 3 модифікації. Це незручно, тому ми будемо підсовувати двигун на етапі створення машини. Так само кожен двигун, може працювати на різному паливі, дизель або бензин, що б не плодити 6 різних реалізацій, при створенні двигуна ми будемо підсовувати в нього тип палива.
Для реалізації паттерна в цьому прикладі необхідно в базовому класі автомобілів додати поле для зберігання покажчика на тип реалізації, значення якого клас буде отримувати в своєму конструкторі, і викликати в разі потреби методи вкладеного об'єкта.
Для реалізації необхідно:
- Базовий абстрактний клас (в нашому випадком то, що описує автомобіль);
- Клас який реалізує базовий клас. У ньому є параметр в який ми будемо підсовувати покажчик на використовуваний двигун (машина може працювати з будь-яким з представлених двигунів);
- Абстракція двигуна;
- Реалізація двигуна.
Загалом параметр, який зберігає покажчик на використовуваний об'єкт і є міст. Ми в нього можемо підсовувати різні об'єкти, головне, що б вони мали однаковий інтерфейс.