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