Стратегия Strategy

паттерн стратегия

Для смены алгоритма достаточно в нужным момент подставить в контекст нужный объект-стратегию. Паттерн стратегия – один из наиболее полезных и часто используемых шаблонов проектирования в программировании. Он позволяет гибко настраивать поведение объекта, независимо от того, как этот объект используется клиентским кодом.

Примеры

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

Задача контроллера определить класс-стратегию и запросить атон брокер у класса-контекста данные для отображения, передав ему известный набор фильтров. Класс-контекст в этой схеме  – это класс, которые реализует метод поиска квартир по заданным фильтрам. На диаграмме классов выше мы видим, что класс контекста определяет метод getData, и принимает аргументы filters.

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

  1. Design patter Strategy  или шаблон проектирования Стратегия  относится к поведенческим шаблонам проектирования.
  2. Состояние можно рассматривать как расширение стратегии – оба паттерна меняют поведение объекта композицией.
  3. При этом в этих стратегиях используется статический полиморфизм через параметр шаблона, а не динамический полиморфизм через виртуальные методы.
  4. В этих классах будет определён лишь один метод, принимающий в параметрах координаты начала и конца пути, а возвращающий массив точек маршрута.
  5. Популярный пример применения паттерна стратегия – реализация разных алгоритмов сортировки, таких как пузырьковая сортировка, сортировка выбором, быстрая сортировка и другие.

Одной из самых востребованных функций являлся поиск и прокладывание маршрутов. Пребывая в неизвестном ему городе, пользователь должен иметь возможность указать начальную точку и пункт назначения, а навигатор — проложит оптимальный путь. В данном случае объект IStrategy заключена в свойстве ContextStrategy, хотя также для нее можно было бы определить приватную переменную, а для динамической установки использовать специальный метод. Это гибкий подход, упрощающий создание новых стратегий. Со временем может возникнуть сложность поддержки множества стратегий.

Признаки применения, использования паттерна Стратегия (Strategy)

Программа может подменить этот объект другим, если требуется иной способ решения задачи. Стратегия — это поведенческий паттерн, выносит набор алгоритмов в собственные классы и делает их взаимозаменимыми. Паттерн Стратегия предлагает определить семейство схожих алгоритмов, которые часто изменяются или расширяются, и вынести их в собственные классы, называемые стратегиями. По типу клиента (или по типу обрабатываемых данных) выбрать подходящий алгоритм, который следует применить. Если используется правило, которое не подвержено изменениям, нет необходимости обращаться к шаблону «стратегия». Интернет-магазин может использовать разные стратегии расчета цен в зависимости от статуса пользователя, сезонных скидок, акций и других факторов.

Пример реализации

Шаблон Strategy позволяет менять выбранный алгоритм независимо от объектов-клиентов, которые его используют. Состояние можно рассматривать как расширение стратегии – оба паттерна меняют поведение объекта композицией. Но в состоянии сами конкретные состояния могут управлять переходом контекста между ними.

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

паттерн стратегия

Метод может принимать различные аргументы, позволяющие реализовать ветвления в ваших алгоритмах. В примера я передаю пользовательские фильтры с типом Map. Как видно из примера, использование паттерна стратегия позволяет гибко настраивать поведение класса Character, не меняя его код. Популярный пример что такое мягкая валюта применения паттерна стратегия – реализация разных алгоритмов сортировки, таких как пузырьковая сортировка, сортировка выбором, быстрая сортировка и другие. Контекстом здесь является массив, а стратегиями – классы сортировок.

Leave a Reply