Паттерн "Стратегия" (Strategy) в Java — выбор алгоритма в runtime
Модель и масштаб — Основы БД, опорные темы, проектирование БД, пакетная работа. Карта — о разделе.
Базовый обзор — в поведенческих паттернах. Практика на 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
| Strategy | Bridge | |
|---|---|---|
| Что меняется | Алгоритм одной операции | Две иерархии целиком |
| Цель | Убрать условную логику | Убрать комбинаторный взрыв классов |
Bridge-практика — Паттерн "Мост" (Bridge) в Java — тип уведомления и канал доставки.