Назад к вопросам
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 с ключами и стратегиями для ещё более чистого кода.