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

Что это такое

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

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


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

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

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

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

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

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

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

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


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

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

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