Структурные шаблоны / Мост
- Описание паттерна
- Реализация паттерна
- Примеры
- Использование
- Преимущества
- Недостатки
- Похожие паттерны
- Взаимодействие с другими паттернами
- Источники
Позволяет разделять абстракцию и реализацию, чтобы они могли изменяться независимо друг от друга.
Вместо того, чтобы создавать дерево классов с разной реализацией, Мост
создает отдельную иерархию реализаций и подключает реализацию с помощью композиции (вместо наследования).
Абстракция
здесь - это образное выражение. Она представляет собой слой управления, который не делает работу самостоятельно, а делегирует ее слою Реализации
(платформе).
Implemention
определяет общий интерфейс для всех конкретных реализаций (методOperationImg()
)- Конкретные реализации
ConcreteImplementions
реализуют этот интерфейс по-своему Abstraction
- общий интерфейс для абстракции приложенияRefinedAbstraction
- уточненная абстракция, реализующая этот интерфейс- Объект с интерфейсом
Implementor
с помощью композиции включается в объект с интерфейсомAbstraction
- Клиент работает только с абстракциями.
- Если у вас есть монолитный класс, который содержит несколько различных реализаций какой-то функциональности (например, если класс может работать с разными системами баз данных).
- Когда класс нужно расширять в двух независимых плоскостях - одну из таких плоскостей можно выделить в отдельную иерархию классов и ссылаться на нее.
- Когда вы хотите, чтобы реализацию можно было бы изменять во время выполнения программы. (В этом
Мост
похож наСтратегию
, но это не его основная задача).
- Позволяет строить платформо-независимые программы.
- Скрывает лишние или опасные детали реализации от клиентского кода.
- Усложняется код программы.
Все эти паттерны имеют похожие структуры: они построены на принципе композиции - делегирования работы другим объектам. Но все они решают разные проблемы.
Способы реализации паттерна (вариации механизмов работы паттерна)
- Абстрактная фабрика (Abstract Factory). Комбинация этих паттернов полезна, если некоторые абстракции могут работать не со всеми реализациями. Фабрика будет определять типы абстракций и реализаций.
- Строитель (Builder). Строитель может быть оформлен в виде
Моста
, гдеДиректор
- абстракция, аСтроители
- реализации.