Паттерн "Мост" (Bridge) в Java — тип уведомления и канал доставки
Модель и масштаб — Основы БД, опорные темы, проектирование БД, пакетная работа. Карта — о разделе.
Обзор паттерна — в структурных паттернах. Здесь — практический 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
| Bridge | Strategy | |
|---|---|---|
| Масштаб | Две независимые иерархии | Один алгоритм внутри объекта |
| Цель | Структурная развязка A x B | Подмена поведения конкретной операции |
Подробнее про Strategy — Паттерн "Стратегия" в C# — когда нужен, а когда достаточно делегата.
Риски
Bridge добавляет уровень абстракции и дополнительных классов. Если ось изменения одна, проще обычный интерфейс и полиморфизм.
См. также
- Структурные паттерны — Мост
- Proxy в Java
- Фасад в Java
- каналы доставки (SMS, email, push) и интеграции — типы взаимодействия