Семантика. Из википедии :
Диаграмма классов UML для шаблона стратегии такая же, как диаграмма для шаблона Bridge. Однако эти два шаблона проектирования не совпадают по своему назначению. В то время как шаблон "Стратегия" предназначен для поведения, шаблон "Мост" предназначен для построения структуры.
Связь между контекстом и стратегиями более тесная, чем связь между абстракцией и реализацией в шаблоне моста.
Насколько я понимаю, вы используете шаблон стратегии, когда абстрагируете поведение, которое может быть предоставлено из внешнего источника (например, config может указывать для загрузки некоторой сборки плагина), и вы используете шаблон моста, когда используете те же конструкции, чтобы сделать ваш код немного более аккуратным. Фактический код будет выглядеть очень похоже - вы просто применяете шаблоны по несколько разным причинам .
Паттерн Мост - это структурный паттерн (КАК СОЗДАТЬ ПРОГРАММНЫЙ КОМПОНЕНТ?). Шаблон стратегии - это динамический шаблон (КАК ВЫ ХОТИТЕ ИСПОЛЬЗОВАТЬ ПОВЕДЕНИЕ В ПРОГРАММНОМ ОБЕСПЕЧЕНИИ?).
Синтаксис похож, но цели разные:
источник
Стратегия:
Намерение - это возможность менять поведение во время выполнения
Мост
Намерение состоит в том, чтобы полностью отделить абстракцию от реализации.
источник
Я думал то же самое, но недавно мне пришлось использовать мост и понял, что мост использует стратегию и добавляет абстракцию в контекст, чтобы позже вы могли внести больше изменений, не меняя клиента. При использовании стратегии без абстракции дизайн не такой гибкий и может потребовать изменений в клиент позже. Но при использовании всего моста конструкция становится еще более гибкой. Здесь вы можете увидеть, как переход от стратегии к мосту дает больше гибкости. Также мы предполагаем, что теперь «виза» и «мастер» доступны не только на карточках, но и на телефонах и чипах; и если мы используем мост, гораздо проще добавить эту поддержку.
источник
Мост : (Структурный образец)
Шаблон моста разделяет абстракцию и реализацию и позволяет обоим варьироваться независимо.
Используйте этот шаблон, когда:
Стратегия: (Образец поведения)
Шаблоны стратегии позволяют переключаться между несколькими алгоритмами из семейства алгоритмов во время выполнения.
Используйте шаблон стратегии, когда:
Похожие сообщения:
Когда вы используете шаблон моста? Чем он отличается от шаблона адаптера?
Пример шаблона стратегии из реального мира
источник
Типы шаблонов проектирования
Мост (структурный)
Возьми пульт. На пульте есть кнопки 1-6. Это конкретный класс на диаграмме выше. Каждая кнопка будет работать по-разному в зависимости от того, используется ли пульт для телевизора или DVD. Функциональность каждой кнопки абстрагируется от реализации интерфейсом разработчика.
Это позволяет нам изменить способ работы пульта дистанционного управления для каждого устройства.
Стратегия (Поведенческая)
В стратегии, если бы мы смотрели на удаленный сценарий. «Состояние» - это весь пульт, который мы меняем, изменяя ссылку на состояние контекста. «ConcreteStateA» (пульт от телевизора) «ConcreteStateB» (пульт DVD).
Дополнительное чтение:
источник
Шаблон стратегии используется для поведенческих решений, а шаблон моста используется для структурных решений.
Brigde Pattern отделяет абстрактные элементы от деталей реализации, в то время как Strategy Pattern заботится о том, чтобы алгоритмы были более взаимозаменяемыми.
Шаблон стратегии в UML
Шаблон Brigde в UML
Шаблон стратегии в Swift:
Выкройка Brigde в Swift:
источник
Stereo
сTV
и код просто работает.Добавляя к ответу willcodejavaforfood, они могут быть одинаковыми в реализации. Однако вы используете стратегию для обмена стратегиями, такими как стратегия сортировки, в то время как вы используете мост для соединения реализаций двух объектов, например, оболочки базы данных и сетевого адаптера, поэтому клиентский код может использовать любую работу с одним и тем же API. Так что название действительно говорит само за себя
источник
Из вики по шаблону стратегии
источник
Просто чтобы добавить к тому, что уже было сказано о сравнении паттернов (различие намерений, ...): паттерн Мост также намеренно структурирован, чтобы позволить варьировать сторону иерархии абстракции. В таких языках, как C #, это может означать, что у вас есть база абстракции, которая содержит виртуальные методы как способ разрешить предполагаемые варианты, которые не вызывают проблем для существующих потребителей. В остальном эти два шаблона могут по большей части казаться идентичными.
источник
Шаблон стратегии используется, когда вы хотите подключить алгоритм или стратегию во время выполнения. Поскольку категория паттерна также подразумевает, что она имеет дело с поведением объектов. С другой стороны, мост представляет собой структурный образец и имеет дело со структурной иерархией объектов. Он отделяет абстракцию от реализации, вводя между ними усовершенствованную абстракцию. Уточненную абстракцию можно спутать с подключенной стратегией времени выполнения (шаблон In Strategy). Шаблон «мост» имеет дело со структурными аспектами, предоставляя механизм, позволяющий избежать создания n классов.
источник
Для шаблона стратегии варьируется только реализация.
Предположим, класс A использует класс B, для которого доступно несколько реализаций. Таким образом, в этом случае B будет абстрактным с фактической реализацией, предоставляемой во время выполнения. Это шаблон стратегии
Теперь, если само A абстрактно. И A, и B могут отличаться. Вы бы использовали паттерн Мост.
источник
Я думаю, между ними есть небольшая разница в контексте, в котором они используются.
Я использую паттерн «Мост» для разделения ортогональных концепций, которые оба принадлежат к более крупному - чтобы позволить им изменяться независимо. Обычно это включает несколько абстракций.
ИМО, паттерн Стратегия проще или более плоский. Он наверняка служит OCP, но не обязательно должен быть частью другой, более крупной концепции, такой как паттерн Мост.
источник