Без рубрики,  Дизайн,  Новости

Дизайн-паттерны Мост (С ++)

Мост (С ++)

Структурные дизайн-паттерны

  1. Адаптер .
  2. Городов.
  3. Композиция.
  4. Декоратор.
  5. Фасад.
  6. Легковес.
  7. Прокси.

Мост (Bridge)

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

Данный шаблон полезен в тех случаях, когда класс не имеет какой-то четкой реализации объекта, а представляет только его абстрактное описание. Реализация проводится в классах-потомках и может быть различной в зависимости от использования. В таком классе создается «мост» — объект, который будет задавать определенную имплементацию.

Допустим, вышла какая-то новая Супермощные игра и вам необходим игровой компьютер, чтобы можно было запустить эту игру и коротать долгие зимние вечера. Но ноутбуки разные, с разным «железом». Ноутбук определенной модели может иметь некоторые элементы по умолчанию, но другие элементы могут устанавливаться в соответствии с потребностями. Например, для оптимального быстродействия игры нужна мощная видеокарта, которая тоже может быть от разных производителей даже если модель ноутбука та же. Если же производитель ноутбука использовал одну модель видеокарты, и вдруг понадобилось использовать другую модель, то придется перепроектовуваты ноутбук с новой видеокартой. Тогда почему бы не иметь под боком несколько видеокарт и устанавливать нужную в процессе сборки?

Итак, есть описание видеокарты:

От него реализуются конкретные модели видеокарт, пусть это будет Nvidia 920M:

 и AMD R5:

Так, не лучший выбор, но деньги позволяют.

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

Объект vcardкак раз и будет своеобразным мостом, который позволит реализовать класс Notebookс той или иной видеокартой. Обратите внимание, что это публичный объект, так как его необходимо выделять извне.

Есть два ноутбука — Lenovo и Dell, которые имеют модели процессора и дисплея по умолчанию, а вот модель видеокарты нужно установить в зависимости от потребностей или желания.

Dell:

Lenovo:

Функция setVideocard()вызывает соответствующую реализацию видеокарты в зависимости какого типа будет объект vcard. Для этого типа видеокарты задается явно.

Использование паттерна следующее:

 

результат:

Это позволяет не создавать дополнительный интерфейс в классе ноутбука, который будет определять тип видеокарты, а использовать уже готовый интерфейс, помогает уменьшить потерю производительности и повышает гибкость кода.

итоги

Мост является одним из самых простых в использовании дизайн-паттернов и позволяет разделить абстракцию класса от его реализации.

Алгоритм использования:

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

Исходный код к статье доступен по ссылке .
Источник

0 голосов (0 баллов в среднем)
0
Поделиться

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

Войти с помощью: 

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