Bridge (Мост)

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

При таком построении архитектуры, мы можем свободно изменять абстракцию и реализацию, наследовать и подменять. Полный код реализации на php я не стану здесь приводить, из-за довольно большого объема.

Заключение

Используйте мост, когда:

  • Хотите избежать постоянной привязки реализации к абстракции (например, когда реализацию необходимо выбирать во время выполнения).
  • Реализация и абстракция могут (или будут) дополняться через наследование
  • Изменение на абстракции или реализации не должны сказываться на клиенте
  • Количество классов начинает стремительно расти, не принося при этом реальной пользы
  • Вы хотите разделить одну реализации между разными абстракциями
  • Хотите повысить степень расширяемости
  • Хотите скрыть детали реализации от клиента

Родственным паттерном для моста является паттерн адаптер, который объединяет связанные части системы и предоставляет простой интерфейс. Правда мост, в отличие от адаптера, внедряется на этапе проектирования, а не на готовых рабочих системах.

Материал взят с источника

Добавить комментарий