Перейти к основному содержимому

Паттерн "Мост" (Bridge) в Java — тип уведомления и канал доставки

Разработчику Архитектору
Теория данных (раздел 3)

Обзор паттерна — в структурных паттернах. Здесь — практический Bridge на Java для системы уведомлений.

Play ITЗагрузка интерактивного демо…


Задача паттерна

Bridge разделяет абстракцию и реализацию, чтобы они развивались независимо.

Если у системы две оси изменений (например, тип уведомления × канал), наследование даёт комбинаторный взрыв классов. Bridge заменяет это композицией:

  • абстракция — что делаем;
  • реализация — как делаем.

Пример — уведомления

Код ITЗагрузка примера кода…

Notification urgentSms = new UrgentNotification(new SmsSender());
urgentSms.notify("+79991234567", "Сервер недоступен");

Notification regularEmail = new RegularNotification(new EmailSender());
regularEmail.notify("dev@company.com", "Деплой завершен");

Любая комбинация собирается без создания отдельного класса UrgentSmsNotification.


Когда использовать

СигналПочему Bridge
Две ортогональные оси измененийСнимается взрыв подклассов
Нужна замена реализации в runtimeМеняем sender без правки абстракции
Платформы/каналы/драйверы развиваются отдельноКоманды работают параллельно над своими иерархиями

Bridge и Strategy

BridgeStrategy
МасштабДве независимые иерархииОдин алгоритм внутри объекта
ЦельСтруктурная развязка A x BПодмена поведения конкретной операции

Подробнее про Strategy — Паттерн "Стратегия" в C# — когда нужен, а когда достаточно делегата.


Риски

Bridge добавляет уровень абстракции и дополнительных классов. Если ось изменения одна, проще обычный интерфейс и полиморфизм.


См. также