Шаблоны программирования на Swift: Bridge

Bridge_example-2x

Тема сегодняшней статьи из цикла шаблоны программирования на Swift — шаблон Bridge.

Bridge

Книга вешает:

Представьте себе, что у нас есть что-то однотипное, к примеру у нас есть телефон и куча наушников. Если бы у каждого телефона был свой разъем, то мы могли бы пользоваться только одним типом наушников. Но Бог миловал! Собственно таже штука и с наушникам. Они могут выдавать различный звук, иметь различные дополнительные функции, но основная их цель – просто звучание:) И хорошо, что во многих случаях штекер у них одинаковый (я не говорю про различные студийные наушники:) ).

Собственно, Мост (Bridge) позволяет разделить абстракцию от реализации, так чтобы реализация в любой момент могла быть поменяна, не меняя при этом абстракции.

Когда использовать?

  1. Вам совершенно не нужна связь между абстракцией и реализацией.

  2. Собственно, как абстракцию так и имплементацию могут наследовать независимо.
  3. Вы не хотите чтобы изменения в реализации имело влияния на клиентский код.

Рассмотрим пример:

Создадим базовый класс для наушников со своим функционалом:

 

И его наследников — дорогие и дешевые наушники:

Как видите, функционал у них свой, отличающийся от базовой абстракции.

И собственно плеер, через который мы будем слушать музыку:

Как видите, одно из свойств нашего плеера – наушники. Их можно подменять в любой момент, так как свойство того же типа, от которого наши дешевые и дорогие наушники наследуются.
Теперь тест!

Вывод в консоль:

Как видно, все работает нормально. Наушники меняются и меняют функционал, при этом базовая абстракция у нас неизменна.

Пример с GitHub

Еще раз:

Шаблон Мост используется для разделения абстрактных элементов класса от деталей реализации, предоставляя средства для замены деталей реализации без изменения абстракции.

 

Итак, у нас есть протокол Прибор, который описывает функционал начала работы, протокол Выключатель, который описывает свойство типа Прибор и функцию включения прибора, которая вызывает функцию начала работы. Два различных прибора — телевизор и пылесос, несомненно, разные по сути приборы, но они оба могут начинать работать, и их можно использовать в одном классе дистанционного управления. Итог — после включения обоих приборов они начали работать.

Опубликовано в Фундаментальные основы, Шаблоны программирования iOS Swift Метки:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*