Перейти к основному содержимому

Паттерн "Стратегия" (Strategy) в Java — выбор алгоритма в runtime

Разработчику Архитектору
Теория данных (раздел 3)

Базовый обзор — в поведенческих паттернах. Практика на C# — в Паттерн "Стратегия" в C# — когда нужен, а когда достаточно делегата. Здесь — Java-реализация с переключением алгоритма в runtime.

Play ITЗагрузка интерактивного демо…


Задача паттерна

Strategy определяет семейство алгоритмов, инкапсулирует каждый в отдельный класс и позволяет подменять их без изменения клиента.

Это избавляет от длинных if-else/switch в месте вызова.


Пример

Код ITЗагрузка примера кода…

CheckoutService checkout = new CheckoutService(new NoDiscountStrategy());
double a = checkout.total(1000);

checkout.setStrategy(new VipDiscountStrategy());
double b = checkout.total(1000);

Когда использовать

  • есть несколько способов выполнения одной операции;
  • алгоритм выбирается по контексту (роль, тариф, регион, тип запроса);
  • требуется расширять варианты без правки основного сервиса.

Strategy и Bridge

StrategyBridge
Что меняетсяАлгоритм одной операцииДве иерархии целиком
ЦельУбрать условную логикуУбрать комбинаторный взрыв классов

Bridge-практика — Паттерн "Мост" (Bridge) в Java — тип уведомления и канал доставки.


См. также