-
Notifications
You must be signed in to change notification settings - Fork 3
Bridge
Pandas edited this page Jun 17, 2017
·
1 revision
Отделить абстракцию от ее реализации так, чтобы то и другое можно было изменять независимо.
Используйте паттерн мост, когда:
- Хотите избежать постоянной привязки абстракции к реализации. Так, например, бывает, когда реализацию необходимо выбирать во время выполнения программы;
- И абстракции, и реализации должны расширяться новыми подклассами. В таком случае паттерн мост позволяет комбинировать разные абстракции и реализации и изменять их независимо;
- Изменения в реализации абстракции не должны сказываться на клиентах, то есть клиентский код не должен перекомпилироваться;
- Вы хотите полностью скрыть от клиентов реализацию абстракции. В C++ представление класса видимо через его интерфейс;
- Abstraction - абстракция: определяет интерфейс абстракции; Хранит ссылку на объект типа Implementor;
- RefinedAbstraction - уточненная абстракция: расширяет интерфейс, определенный абстракцией Abstraction;
- Implementor - реализатор: определяет интерфейс для классов реализации. Он не обязан точно соответствовать интерфейсу класса Abstraction. На самом деле оба интерфейса могут быть совершенно различны. Обычно интерфейс класса Implementor предоставляет только примитивные операции, а класс Abstraction определяет операции более высокого уровня, базирующиеся на этих примитивах;
- Concretelmplementor - конкретный реализатор: содержит конкретную реализацию интерфейса класса Implementor.
Результаты применения паттерна мост таковы:
- Отделение реализации от интерфейса.
- Повышение степени расширяемости.
- Сокрытие деталей реализации от клиентов.
