Sobes.tech
Назад к вопросам
Senior
4

Как заменить большие конструкции if-else / switch-case с помощью паттернов (например, Strategy)?

Компании, где спрашивали
Octo

Ответ от нейросети

sobes.tech AI

Большие конструкции if-else или switch-case часто приводят к сложному и трудно поддерживаемому коду. Паттерн Strategy помогает заменить их на более гибкую и расширяемую архитектуру.

Идея в том, чтобы вынести разные варианты поведения в отдельные классы (стратегии), реализующие общий интерфейс. Затем в клиентском коде выбирается нужная стратегия и вызывается её метод.

Пример на Java:

// Интерфейс стратегии
public interface PaymentStrategy {
    void pay(int amount);
}

// Конкретные стратегии
public class CreditCardPayment implements PaymentStrategy {
    public void pay(int amount) {
        System.out.println("Оплата кредитной картой: " + amount);
    }
}

public class PayPalPayment implements PaymentStrategy {
    public void pay(int amount) {
        System.out.println("Оплата через PayPal: " + amount);
    }
}

// Контекст
public class PaymentContext {
    private PaymentStrategy strategy;

    public void setStrategy(PaymentStrategy strategy) {
        this.strategy = strategy;
    }

    public void pay(int amount) {
        strategy.pay(amount);
    }
}

// Использование
PaymentContext context = new PaymentContext();

// В зависимости от условия выбираем стратегию
if (userPrefersCreditCard) {
    context.setStrategy(new CreditCardPayment());
} else {
    context.setStrategy(new PayPalPayment());
}
context.pay(1000);

Такой подход:

  • Упрощает добавление новых вариантов (достаточно добавить новый класс стратегии)
  • Избавляет от громоздких условных операторов
  • Улучшает читаемость и тестируемость кода

Вместо if-else можно использовать Map с ключами и стратегиями для ещё более чистого кода.