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

Паттерн Стратегия — что это, как используется, чем лучше switch-case?

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

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

sobes.tech AI

Паттерн Стратегия (Strategy) — это поведенческий шаблон проектирования, который позволяет определить семейство алгоритмов, инкапсулировать каждый из них и делать их взаимозаменяемыми. Это позволяет изменять алгоритмы независимо от клиентов, которые ими пользуются.

Как используется:

  • Создаётся интерфейс стратегии с методом, реализующим алгоритм.
  • Несколько классов реализуют этот интерфейс, каждый со своей версией алгоритма.
  • Контекст содержит ссылку на объект стратегии и делегирует вызов алгоритма этому объекту.

Преимущества перед switch-case:

  • Расширяемость: добавление новых стратегий не требует изменения существующего кода, а только добавления новых классов.
  • Избегание громоздких switch-case: код становится чище и легче поддерживается.
  • Принцип открытости/закрытости: классы открыты для расширения, но закрыты для модификации.
  • Повышение читаемости и тестируемости: каждая стратегия — отдельный класс, что упрощает тестирование.

Пример на Java:

interface PaymentStrategy {
    void pay(int amount);
}

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

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

class ShoppingCart {
    private PaymentStrategy paymentStrategy;

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

    public void checkout(int amount) {
        paymentStrategy.pay(amount);
    }
}

Вместо switch-case, выбирающего способ оплаты, мы просто меняем стратегию.