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

Что это такое

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

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


Пример: фигуры и рендереры

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

Любая фигура, любой рендерер

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

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

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

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

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


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

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

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