Skip to content
Pandas edited this page Jun 17, 2017 · 1 revision

Назначение

Отделить абстракцию от ее реализации так, чтобы то и другое можно было изменять независимо.

Применимость

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

  • Хотите избежать постоянной привязки абстракции к реализации. Так, например, бывает, когда реализацию необходимо выбирать во время выполнения программы;
  • И абстракции, и реализации должны расширяться новыми подклассами. В таком случае паттерн мост позволяет комбинировать разные абстракции и реализации и изменять их независимо;
  • Изменения в реализации абстракции не должны сказываться на клиентах, то есть клиентский код не должен перекомпилироваться;
  • Вы хотите полностью скрыть от клиентов реализацию абстракции. В C++ представление класса видимо через его интерфейс;

Структура

Imgur

Участники

  • Abstraction - абстракция: определяет интерфейс абстракции; Хранит ссылку на объект типа Implementor;
  • RefinedAbstraction - уточненная абстракция: расширяет интерфейс, определенный абстракцией Abstraction;
  • Implementor - реализатор: определяет интерфейс для классов реализации. Он не обязан точно соответствовать интерфейсу класса Abstraction. На самом деле оба интерфейса могут быть совершенно различны. Обычно интерфейс класса Implementor предоставляет только примитивные операции, а класс Abstraction определяет операции более высокого уровня, базирующиеся на этих примитивах;
  • Concretelmplementor - конкретный реализатор: содержит конкретную реализацию интерфейса класса Implementor.

Результаты

Результаты применения паттерна мост таковы:

  • Отделение реализации от интерфейса.
  • Повышение степени расширяемости.
  • Сокрытие деталей реализации от клиентов.

Clone this wiki locally