Шаблон проектирования моста с примером
Что такое шаблон проектирования моста?
Согласно определениям GOF, шаблон моста «отделяет абстракцию от ее реализации, чтобы они могли меняться независимо друг от друга».
В шаблоне проектирования моста есть два слоя.
Первый уровень — это уровень абстракции.
а второй уровень — это уровень реализации.
Если я внесу какие-либо изменения на уровне реализации, это не повлияет на уровень абстракции.
Точно так же, если я внесу какие-либо изменения в уровень абстракции, это не повлияет на уровень реализации.
Диаграмма классов шаблона проектирования моста:
Как показано на предыдущей диаграмме, шаблон проектирования моста состоит из четырех компонентов. Они следующие:
Implementer :
это интерфейс, который должен быть реализован всеми классами реализации. Этот интерфейс будет действовать как мост между классом абстракции и классом реализации.
ConcreteImplementationA / ConcreteImplementaionB :
это классы, реализующие Implementor. Эти классы содержат конкретную реализацию всех операций.
Абстракция :
Это будет абстрактный класс. который определяет методы для вызова клиентского кода. этот абстрактный класс содержит защищенную переменную реализации, которая содержит ссылку на объект, выполняющий реализацию.
ConcreteAbstraction/RefinedAbstraction :
это классы, унаследованные от абстрактного класса Abstraction.
Понимание шаблона проектирования моста на примере:
Предположим, мы хотим (производить и собирать) новые автомобили следующих двух типов (BMW или Mercedes).
для этого нам нужен цех для каждого типа, чтобы реализовать две предыдущие задачи (производство и сборка).
Таким образом, диаграмма классов для нашего примера будет выглядеть следующим образом:
Реализация :
Когда нам нужно использовать шаблон проектирования моста в приложениях реального времени?
Нам нужно использовать шаблон проектирования моста в приложениях реального времени, когда:
1- Мы хотим скрыть детали реализации от клиента.
2. Мы хотим, чтобы выбор или переключение реализации происходило во время выполнения, а не во время разработки.
3. Мы хотим, чтобы классы абстракции и реализации были расширяемыми подклассами.
4. Мы хотим избежать тесной связи между абстракцией и ее реализацией.
5- Изменения в реализации абстракции не должны влиять на клиентов.
Ссылка на полный код на Github:
StructuralDesignPatterns/4-BridgeDP