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

Что это

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

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


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

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

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

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

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

Когда применять

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

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


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

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

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