Паттерн "Мост" (Bridge) — это структурный паттерн проектирования, который разделяет абстракцию и реализацию, позволяя им изменяться независимо.
Ключевые особенности:
- Разделение: Отделяет абстрактный класс или интерфейс от его конкретной реализации.
- Гибкость: Позволяет динамически связывать различные реализации с одной и той же абстракцией.
- Уменьшение сложности: Предотвращает разрастание иерархий классов, которые возникают при наследовании.
Структура:
- Абстракция (Abstraction): Определяет интерфейсную часть класса (клиентский интерфейс) и содержит ссылку на реализацию.
- Расширенная Абстракция (Refined Abstraction): Расширяет Абстракцию, добавляя или модифицируя поведение.
- Реализация (Implementor): Определяет интерфейс для классов реализации. Не обязательно соответствует Абстракции один к одному.
- Конкретная Реализация (Concrete Implementor): Реализует интерфейс Реализации.
Пример использования:
Предположим, есть фигуры (круг, квадрат) и рендереры (рисовать на экране, экспортировать в файл). Без Моста пришлось бы создавать классы вида ЭкранныйКруг
, ФайловыйКруг
, ЭкранныйКвадрат
, ФайловыйКвадрат
. С Мостом можно иметь классы Круг
и Квадрат
(Абстракции) и ЭкранныйРендерер
и ФайловыйРендерер
(Конкретные Реализации), связывая их через интерфейс Реализ
Паттерн "Мост" (Bridge) — это структурный паттерн проектирования, который разделяет абстракцию и реализацию, позволяя им изменяться независимо.
Ключевые особенности:
- Разделение: Отделяет абстрактный класс или интерфейс от его конкретной реализации.
- Гибкость: Позволяет динамически связывать различные реализации с одной и той же абстракцией.
- Уменьшение сложности: Предотвращает разрастание иерархий классов, которые возникают при наследовании.
Структура:
- Абстракция (Abstraction): Определяет интерфейсную часть класса (клиентский интерфейс) и содержит ссылку на реализацию.
- Расширенная Абстракция (Refined Abstraction): Расширяет Абстракцию, добавляя или модифицируя поведение.
- Реализация (Implementor): Определяет интерфейс для классов реализации. Не обязательно соответствует Абстракции один к одному.
- Конкретная Реализация (Concrete Implementor): Реализует интерфейс Реализации.
Пример использования:
Предположим, есть фигуры (круг, квадрат) и рендереры (рисовать на экране, экспортировать в файл). Без Моста пришлось бы создавать классы вида ЭкранныйКруг
, ФайловыйКруг
, ЭкранныйКвадрат
, ФайловыйКвадрат
. С Мостом можно иметь классы Круг
и Квадрат
(Абстракции) и ЭкранныйРендерер
и ФайловыйРендерер
(Конкретные Реализации), связывая их через интерфейс Реализ