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

Схема моста меня очень порадовала, когда я узнала об этом впервые. Это действительно помогает вам, когда вы не знаете точную бизнес-логику для реализации, но вам нужно развивать свою абстракцию из-за крайнего срока проекта. Когда бизнес-логика исходит от клиентов, необходимо кодировать только бизнес-логику.

Тип: структурный образец

Также известен как ручка/корпус

Структура:

Участники:

  1. Абстракция: определяет интерфейс абстракции. Поддерживает ссылку на объект типа Implementor.
  2. RefinedAbstraction: расширяет интерфейс, определенный в Abstraction.
  3. Implementor: определяет интерфейс для классов реализации. Этот интерфейс не обязательно должен точно соответствовать интерфейсу Abstraction; на самом деле два интерфейса могут быть совершенно разными. Обычно интерфейс Implementor предоставляет только примитивные операции, а Abstraction определяет операции более высокого уровня на основе этих примитивов.
  4. ConcreteImplementor: реализует интерфейс Implementor и определяет его конкретную реализацию.

Внедрение Swift 4:

Давайте рассмотрим наши требования от клиента — рисовать круг и прямоугольник, но мы до сих пор не знаем, как реализовать код, который на самом деле рисует эти фигуры. В практическом сценарии это может произойти из-за отсутствия знаний о геометрии или о том, какую стороннюю библиотеку мы выбираем для рисования этих фигур. Те, кто не знает шаблон моста, будут ждать, пока не будет реализована фактическая реализация чертежа, что может быть связано с задержкой в ​​​​разработке. Если в этом случае мы будем следовать Шаблону моста, не нужно ждать подробностей реализации, а просто создавать классы абстракции и использовать эти классы во всем проекте. Все будет ясно, идем дальше.

Базовый класс абстракции. Реализуя этот базовый класс, мы можем расширить абстракцию и создать конкретные классы, которые будут использоваться в других частях проекта. В следующем примере Shape — базовый класс абстракции, а Circle и Rectangle — конкретные классы нашей абстракции. Обратите внимание на метод draw(), на самом деле фигура не рисуется, а связана с другим классом, вызывающим метод этого класса. Здесь GraphicsAPI — это класс, известный как Implementor. Классы абстракции вызывают методы классов реализации, и это ключевая часть шаблона Bridge.

В приведенном выше коде написаны все классы абстракции. Теперь классы реализации должны быть реализованы на основе выбора бизнес-логики/реализации.

Использование шаблона моста в замечательных. Шаблон моста хорош для привязки реализации во время выполнения. В нашем примере вы могли заметить, что у нас есть 2 конкретных класса реализации. Вы можете выбрать любой из них во время выполнения. Например, вы можете рисовать круг и прямоугольник с помощью DirectXAPI/OpenGLAPI во время выполнения.

Полный исходный код находится здесь: Github