Bridge (Мост) относиться к классу структурных паттернов. Он используется для отделения абстракции от ее реализации так, чтобы то и другое можно было изменять независимо.
Если для одной абстракции возможно несколько несколько реализаций, то обычно используют наследование. Однако такой подход не всегда удобен, так как наследование жестко привязывает реализацию к абстракции, что затрудняет независимую модификацию и усложняет их повторное использование.
Давайте рассмотрим пример реализации системы, которая умеет отдавать данные сразу в нескольких представлениях: HTML, CLI, JSON, XML. Естественно мы хотим получить простую, расширяемую реализацию, которая позволила бы нам с легкостью это делать. В итоге приходим примерно к такой архитектуре:
Казалось бы все отлично, общие методы реализуются в абстрактном классе View, а специфические для представления в конкретной реализации. А если появится специфический класс, отображение которого зависит от представления?
В итоге нам придется для каждого такого класса плодить конкретные реализации. Более того, для каждого нового представления мы будем вынуждены воссоздать полное дерево классов. Логичнее всего здесь отделить абстракцию от реализации, и позволить использовать их по отдельности, чтобы придти к такой архитектуре:
При таком построении архитектуры, мы можем свободно изменять абстракцию и реализацию, наследовать и подменять. Полный код реализации на php я не стану здесь приводить, из-за довольно большого объема.
Заключение
Используйте мост, когда:
- Хотите избежать постоянной привязки реализации к абстракции (например, когда реализацию необходимо выбирать во время выполнения).
- Реализация и абстракция могут (или будут) дополняться через наследование
- Изменение на абстракции или реализации не должны сказываться на клиенте
- Количество классов начинает стремительно расти, не принося при этом реальной пользы
- Вы хотите разделить одну реализации между разными абстракциями
- Хотите повысить степень расширяемости
- Хотите скрыть детали реализации от клиента
Родственным паттерном для моста является паттерн адаптер, который объединяет связанные части системы и предоставляет простой интерфейс. Правда мост, в отличие от адаптера, внедряется на этапе проектирования, а не на готовых рабочих системах.
Материал взят с источника