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