Стратегия (Strategy)

Метафора

 

Стратегия используется для выбора различных путей достижения результата. Допустим, нам понадобилось сходить в магазин за продуктами, какой выбор у нас есть? Можно заказать продукты на дом, можно сходить самому, можно отправить жену :). В любом из возможных случаев вы получаете результат – продукты из магазина.

 

Назначение

 

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

 

Диаграмма

 

Strategy

Стратегия

 

Context — это клиент стратегии. Интерфейс стратегии реализуют два класса, которые по-своему выполняют операцию execute. Паттерн не определяет правило определения той или иной стратегии. Стратегия может быть выбрана самим клиентом или внедрена извне. Так же паттерн не определяет, каким образом конкретные стратегии получат данные для своей работы. Количество операций так же не регламентируется.

 

Пример

 

В примере в качестве контекста выступает сама программа, так же в рамках неё происходит определение того, какая стратегия расчёта нужна (умножение, вычитание, сложение).