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

Что это такое

Паттерн Bridge разделяет одно понятие на два независимых измерения, чтобы они могли меняться отдельно. Фигуры и способы их рисования; сообщения и способы их отправки.

Без моста получается по одному классу на каждую комбинацию — VectorCircle, TextCircle, VectorSquare... — и список разрастается. С мостом одна сторона хранит интерфейс другой стороны: любая фигура работает с любым отрисовщиком.


Пример: фигуры и отрисовщики

2 отрисовщика × 2 фигуры дали бы 4 комбинированных класса. Здесь это один класс Shape плюс 2 класса отрисовщиков, соединённые одним полем-интерфейсом — это и есть мост.

Любая фигура, любой отрисовщик

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

Prompt
Напишите программу на TypeScript, показывающую паттерн Bridge: интерфейс Renderer с методом draw(name), реализованный классами VectorRenderer и TextRenderer как одно измерение, и класс Shape, хранящий имя плюс Renderer как другое измерение. Постройте окружность с каждым отрисовщиком и квадрат с векторным, и напечатайте каждую строку.
Вывод: программа на TypeScript и захваченный вывод

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

Используйте, когда замечаете взрыв комбинаций: каждый новый вид на одной оси вынуждает создавать новые классы на другой. Две независимые оси — разделите их.

Пропустите, когда у одного измерения ровно одна реализация. Мост к одному берегу — это просто пирс.


Плюсы и минусы

Плюсы: обе стороны растут независимо; комбинации получаются бесплатно; каждую сторону можно тестировать отдельно.

Минусы: больше косвенности с самого начала; распознать две оси заранее по-настоящему трудно — слишком раннее разделение создаёт абстракцию, которая никому не нужна.