Целесообразно использовать паттерн «Стратегия» в следующих ситуациях:
- Когда нужно использовать разные вариации какого-то алгоритма внутри одного объекта. 3 Стратегия позволяет варьировать поведение объекта во время выполнения программы, подставляя в него различные объекты-поведения (например, отличающиеся балансом скорости и потребления ресурсов). 3
- Когда есть множество похожих классов, отличающихся только некоторым поведением. 3 Стратегия позволяет вынести отличающееся поведение в отдельную иерархию классов, а затем свести первоначальные классы к одному, сделав поведение этого класса настраиваемым. 3
- Когда не хочется обнажать детали реализации алгоритмов для других классов. 3 Стратегия позволяет изолировать код, данные и зависимости алгоритмов от других объектов, скрыв эти детали внутри классов-стратегий. 3
- Когда различные вариации алгоритмов реализованы в виде разветвлённого условного оператора. 3 В этом случае проще перенести код из ветвей в отдельные классы стратегий. 4
Таким образом, паттерн «Стратегия» применяется в случаях, когда в одном и том же месте в зависимости от текущего состояния системы (или её окружения) должны использоваться различные алгоритмы. 1