Strategy — выбор алгоритма во время выполнения
Strategy позволяет заменить алгоритм поведения объекта без изменения его кода. Вместо одного жестко заданного алгоритма объект использует семейство стратегий, каждая из которых инкапсулирует свое поведение.
Паттерн применяется, когда система должна поддерживать несколько вариантов логики: разнные методы расчета, способы сортировки, правила тарификации, сценарии обработки данных.
Strategy делает архитектуру гибкой, тестируемой и расширяемой, позволяя подбирать поведение динамически во время работы.
Strategy (Стратегия) — это фундаментальный поведенческий паттерн, который позволяет выделять алгоритмы в отдельные классы, подменять их во время выполнения и добавлять новые без изменения существующего кода. Это обеспечивает слабую связанность, расширяемость и соответствие принципу открытости/закрытости (OCP).
Главная идея Strategy
Вместо того чтобы писать в объекте:
arduinoif условие: логика 1 else: логика 2
объект делегирует выполнение алгоритма стратегии, которая реализует интерфейс поведения.
Таким образом:
-
логика вынесена наружу;
-
различные варианты поведения оформлены как независимые классы;
-
выбрать стратегию можно в рантайме;
-
объект не зависит от конкретных алгоритмов.
Где Strategy используется в архитектуре
1. Расчет стоимости, тарифов, скидок
В ритейле, банках, логистике:
-
разные схемы расчета тарифа;
-
динамическая цена;
-
разные налоговые правила;
-
акции и скидки.
Вместо большого количества if — используется Strategy.
2. Платежные шлюзы и провайдеры
Платежи могут идти через:
-
Тинькофф,
-
Сбербанк,
-
CloudPayments,
-
Stripe,
-
PayPal.
Каждый — это стратегия:
markdownPaymentStrategy - TinkoffStrategy - PayPalStrategy - etc
Логика оплаты подменяется «на лету».
3. Поиск и сортировка
Выбор:
-
сортировки по цене;
-
сортировки по дате;
-
сортировки по релевантности.
Переход на новую стратегию не требует менять код списка.
4. Компрессия и шифрование
Например:
-
ZIP / GZIP / LZ4
-
AES / RSA / ГОСТ
Каждый алгоритм — стратегия.
5. Логирование
Формат логов может быть разный:
-
JSON
-
Plain text
-
CSV
-
Конфиденциальный формат
Каждый формат — стратегия.
6. Маршрутизация в микросервисах
При отказах или ограничениях выбирают:
-
Round Robin
-
Least Connections
-
Weighted
-
Failover
Маршрутизатор использует Strategy для выбора алгоритма.
7. Выбор бизнес-логики
Например:
-
разные правила валидации для клиентов разных типов;
-
разные сценарии обработки заказа;
-
разные workflows для разных сегментов пользователей.
Это особенно важно в системах с высокой вариативностью.
Strategy в архитектурных стилях
Strategy лежит в основе:
-
цепочек middleware;
-
обработчиков в API Gateway;
-
pipeline-процессинга;
-
workflow-движков;
-
CI/CD pipelines;
-
механизмов plug-in архитектуры.
Преимущества Strategy
-
слабая связанность;
-
замена поведения без изменения класса;
-
расширяемость;
-
простота тестирования;
-
динамический выбор поведения;
-
чистый и модульный код.
Недостатки
-
увеличение количества классов;
-
может быть излишним для простых систем;
-
требует дисциплины при проектировании интерфейсов.
Но в больших системах Strategy — must have.
Strategy в российских учебниках
Strategy приводится как:-
универсальный способ инкапсуляции алгоритмов;
-
механизм для бизнес-правил;
-
средство реализации вариативного поведения;
-
альтернатива множеству условных операторов;
-
основа модульных и плагинных систем.
Особенно выделяется в темах ИС для предприятий.
Почему архитектор обязан знать Strategy
Потому что почти каждая реальная система имеет:
-
десятки вариантов правил,
-
динамические алгоритмы,
-
множество параметрических сценариев,
-
разные версии логики.
Без Strategy код быстро превращается в хаос.
С Strategy — архитектура становится чистой, расширяемой и управляемой.