Паттерны проектирования: Мост (Bridge)

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

Давайте представим, что у нас есть веб-сайт с разными страницами, а нам надо разрешить пользователям менять тему этих страниц. Что делать? Вряд ли будет разумно создавать множественные копии для каждой веб-страницы и для каждой темы. Вопрос можно решить благодаря шаблону Мост.

Если говорить простыми словами, то при использовании шаблона Мост обеспечивается предпочтение композиции над наследованием. В данном случае происходит передача деталей реализации из одной иерархии в другой объект с отдельной иерархией.

Лучше всего, конечно, посмотреть, как это будет выглядеть в коде вышеописанного примера с веб-страницами. Итак, у нас существует иерархия WebPage:

А также отдельная иерархия Theme:

Теперь смотрим применение в коде:

Также вам может быть интересен пример реализации шаблона «Мост» на языке программирования Java: https://github.com/iluwatar/java-design-patterns/tree/master/bridge.

По материалам статьи «Design Patterns for Humans» — https://github.com/kamranahmedse/design-patterns-for-humans.