Паттерн "Стратегия" (Strategy) в Java — выбор алгоритма в runtime
Базовый обзор — в поведенческих паттернах. Практика на C# — в 117. Здесь — Java-реализация с переключением алгоритма в runtime.
Задача паттерна
Strategy определяет семейство алгоритмов, инкапсулирует каждый в отдельный класс и позволяет подменять их без изменения клиента.
Это избавляет от длинных if-else/switch в месте вызова.
Пример
interface DiscountStrategy {
double apply(double amount);
}
class NoDiscountStrategy implements DiscountStrategy {
@Override
public double apply(double amount) {
return amount;
}
}
class VipDiscountStrategy implements DiscountStrategy {
@Override
public double apply(double amount) {
return amount * 0.85;
}
}
class CheckoutService {
private DiscountStrategy strategy;
CheckoutService(DiscountStrategy strategy) {
this.strategy = strategy;
}
void setStrategy(DiscountStrategy strategy) {
this.strategy = strategy;
}
double total(double amount) {
return strategy.apply(amount);
}
}
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-практика — 131.
См. также
См. также
Другие статьи этого же раздела в боковом меню (как на странице "О разделе"). Паттерн — это повторяющийся шаблон, узор или схема. Паттерны встречаются повсюду — в природе, архитектуре, поведении людей и, конечно, в программировании. Порождающие паттерны проектирования — это группа шаблонов, направленных на решение задач, связанных с созданием объектов. Структурные паттерны — это группа шаблонов проектирования, решающих задачи организации классов и объектов таким образом, чтобы обеспечить гибкую архитектуру программного обеспечения. Поведенческие паттерны — это группа шаблонов проектирования, которые определяют способы взаимодействия объектов и распределения ответственности между ними. Архитектурные паттерны — это проверенные решения для организации структуры программного обеспечения. Интеграция систем — одна из центральных задач в современной разработке программного обеспечения. Паттерны доменного моделирования представляют собой проверенные решения для организации бизнес-логики в программных системах. Паттерн Strategy в C# — классическая реализация через интерфейс, замена на Func и Action, DI и критерии выбора без лишних абстракций. Паттерн Iterator в C# — ручной IEnumerator, генерация итератора компилятором через yield return, ленивость, LINQ и случаи, когда класс писать всё же нужно. Abstract Factory в C# и .NET — классическая схема через интерфейсы, замена через DI-контейнер, фабричный делегат и keyed services в .NET 8. Паттерн Command в C# — классическая схема, делегаты, MediatR, очередь задач, undo и критерии выбора между объектом команды и простым вызовом сервиса. Паттерн Observer в C# — event и делегаты, IObservable IObserver, слабая связанность, отписка и как не поймать утечки памяти в долгоживущих сервисах.Обзор паттернов проектирования
Порождающие паттерны
Структурные паттерны
Поведенческие паттерны
Архитектурные паттерны
Паттерны интеграции внешних систем
Паттерны проектирования доменных моделей
Стратегия в C#
Итератор в C#
Фабрика в C#
Команда в C#
Наблюдатель в C#