1.0Kпросмотров
34.5%от подписчиков
17 января 2026 г.
Score: 1.1K
👨💻 Когда if начинает распухать Паттерн стратегия подходит, когда один и тот же сценарий можно выполнить несколькими способами, и выбор зависит от условий. Вместо большого switch внутри сервиса разные варианты выносятся в отдельные классы с общим интерфейсом, а контекст просто делегирует работу выбранной реализации. Типовая схема такая. Есть интерфейс Strategy, есть несколько конкретных стратегий, и есть контекст, который держит ссылку на стратегию и вызывает ее метод, не зная деталей реализации. Это снижает связность и позволяет добавлять новые варианты без переписывания старого кода. Мини пример на C#:
public interface IDiscountStrategy
{ decimal Apply(decimal total);
} public sealed class RegularDiscount : IDiscountStrategy
{ public decimal Apply(decimal total) => total;
} public sealed class VipDiscount : IDiscountStrategy
{ public decimal Apply(decimal total) => total * 0.9m;
} public sealed class Checkout
{ private readonly IDiscountStrategy _discount; public Checkout(IDiscountStrategy discount) => _discount = discount; public decimal TotalWithDiscount(decimal total) => _discount.Apply(total);
} Если стратегия выбирается по условиям, условие должно выбирать объект, а не ветку кода:
var checkout = serviceProvider.GetRequiredService<Checkout>();
var total = checkout.TotalWithDiscount(100m); Выбор стратегии лучше делать на границе приложения, например в фабрике или при конфигурации через DI, потому что прямое создание зависимостей внутри сервиса жестко привязывает код к конкретной реализации. Профессор Си