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