Bridge — разделение абстракции и реализации
Bridge позволяет независимо развивать абстракцию (то, что делает система) и реализации (как именно она это делает). Вместо жесткого наследования создается две иерархии, связанные через композицию.
Паттерн предотвращает рост количества классов при расширении функциональности, упрощает замену реализаций и делает систему гибкой для изменений.
Bridge широко применяется в драйверах, интеграциях, UI-фреймворках, файловых системах, рендеринге, логировании, криптографии и при проектировании многоплатформенных модулей.
Bridge — это один из наиболее архитектурных паттернов, потому что он решает фундаментальную проблему:
когда абстракция и реализация развиваются независимо, их нельзя связывать жестким наследованием.
Идея паттерна Bridge
Мы разделяем систему на две иерархии:
-
Abstraction — логика, функции, высокоуровневый интерфейс.
-
Implementation — конкретная реализация, платформа, драйвер, протокол.
Свзяь — через композицию, а не наследование.
Абстракция «держит ссылку» на реализацию и делегирует ей низкоуровневые функции.
Это позволяет менять:
-
реализацию без изменения абстракции;
-
абстракцию без изменения реализации.
Зачем нужен Bridge
Без Bridge при расширении функциональности часто возникает «взрыв классов»:
Например:
Если есть разные формы документов (PDF, DOCX, HTML) и разные способы хранения (локально, в облаке, в БД), то количество классов растёт как:
3 × 3 = 9
С Bridge:
-
3 класса абстракции
-
3 реализации
-
6 классов, без растущей матрицы.
Архитектура остаётся стабильной и предсказуемой.
Где Bridge применяется в архитектуре
1. Драйверы и аппаратные интерфейсы
Устройства разные (принтеры, сканеры, камеры).
Интерфейс один (Print, Scan).
Bridge связывает абстракцию и драйвер.
2. Логирование
Абстракция: Logger
Реализация: Console, File, Database, JSON
Это классический Bridge.
3. Криптография
Абстракция: Encryptor
Реализация: AES, RSA, ГОСТ, аппаратные ключи
Позволяет менять алгоритмы без переписывания кода.
4. UI-фреймворки
Абстракция: элемент UI
Реализация: Windows, Linux, macOS, WebGL, DirectX
Старые кроссплатформенные UI-фреймворки построены на Bridge.
5. Файловые системы
Абстракция: File
Реализация: NTFS, ext4, S3, HDFS
Путь один, а способ хранения — разный.
6. Сетевые протоколы
Абстракция: транспорт
Реализация: TCP, UDP, QUIC
Bridge делает систему независимой от протокола.
7. Микросервисы и адаптеры инфраструктуры
Если сервис должен работать:
-
в Kubernetes,
-
на bare-metal,
-
в серверлесс,
-
в Docker Swarm,
Bridge позволяет скрыть эти различия.
Преимущества Bridge
-
значительно уменьшает количество классов;
-
делает архитектуру расширяемой;
-
позволяет развивать абстракцию и реализацию независимо;
-
предотвращает избыточное наследование;
-
улучшает тестируемость;
-
поддерживает модульность.
Недостатки
-
усложняет структуру при маленьких системах;
-
требует внимательной работы с абстракциями;
-
может привести к слишком абстрактному дизайну при неопытном использовании.
Bridge — инструмент архитектора, а не начинающего разработчика.
Bridge в учебниках
Bridge приводится как пример:
-
разделения платформенно-зависимых и бизнес-уровней;
-
построения многослойной архитектуры;
-
отделения интерфейсов от реализаций;
-
проектирования кроссплатформенных решений.
Также часто упоминается при обсуждении архитектуры корпоративных приложений и систем интеграции.
Почему архитектор обязан знать Bridge
Потому что Bridge — основа устойчивой архитектуры.
Он позволяет:
-
не допустить взрыв количества классов;
-
предотвращать жёсткую связанность;
-
абстрагировать платформу и протоколы;
-
облегчать миграции;
-
поддерживать многоплатформенность;
-
проектировать стабильные и расширяемые системы.
Практически каждая средняя или крупная система содержит несколько Bridge-иерархий.