Паттерн Bridge представляет собой возможность объединения двух разных интерфейсов так, чтобы каждый из них развивался раздельно. Чтобы понять его назначение, проще всего объяснить на примере Java.
Приложение Java должны работать в разных операционных системах и возникает проблема унификации элементов. Например чекбоксы или выпадающие списки в Windows и Linux имеют разный вид. Таким образом, библиотека визуальных компонентов должна развиваться отдельно, но будет ещё один интерфейс, который будет реализовывать уже конкретную версию отрисовки. Вот такая взаимосвязь и реализуется через шаблон Мост.
Начать, наверное лучше с просмотра исходного кода.
Итак. У нас есть некий интерфейс BridgeInterface
, которым определяется тип данных. Его реализация происходит в классах Bridge1
и Bridge2
.
Также у нас есть некий класс приложения App
, который расширяет абстрактный класс AppAbstract
. Это класс в своём конструкторе принимает какой-то конкретный BridgeInterface
и выполняет с ним необходимые операции.
Внешне это выглядит так:
$a = new App(new Bridge1()); $a->run(); $b = new App(new Bridge2()); $b->run();
Если внимательно посмотреть, то Bridge очень похож на шаблон Strategy. Различия носят больше «идеологический» характер. В Bridge упор делается на строгую типизацию, поэтому используются интерфейсы и абстрактные классы. В Стратегии же, главная задача — запуск конкретного метода, который может быть достаточно «вольным».
Bridge - используется там, где существует большое количество классов со сложной типизацией, которые развиваются раздельно. Таких задач в PHP практически не существует, поэтому паттерн особо и не используется.