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

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

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

  1. Если вдруг понадобится сменить алгоритм, в контекст можно подать другую стратегию.
  2. Каждая ветка такого оператора представляет собой вариацию алгоритма.
  3. Когда у вас есть множество похожих классов, отличающихся только некоторым поведением.
  4. В ближайшей перспективе вы хотели бы добавить прокладывание маршрутов по велодорожкам.

Когда вам нужно использовать разные вариации какого-то алгоритма внутри одного объекта. В ближайшей перспективе вы хотели бы добавить https://lahore-airport.com/ прокладывание маршрутов по велодорожкам. А в отдалённом будущем — интересные маршруты посещения достопримечательностей.

Хотя каждый класс будет прокладывать маршрут по-своему, для навигатора это не будет иметь никакого значения, так как его работа заключается только в отрисовке маршрута. Навигатору достаточно подать в стратегию данные о начале и конце маршрута, чтобы получить массив точек маршрута в оговорённом формате. Любое изменение алгоритмов поиска, будь то исправление багов или добавление нового алгоритма, затрагивало основной класс. Это повышало риск сделать ошибку, случайно задев остальной работающий код.

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

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


Comments

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *