Стратегия - это паттерн, который определяет семейство алгоритмов, инкапсулирует каждый из них и делает их взаимозаменяемыми.
Стоит использовать когда нужно использовать разные варианты одного алгоритма, когда есть несколько похожих классов, отличающихся только поведением и для замены громоздких условных операторов.
`from abc import ABC, abstractmethod
#Интерфейс стратегииclass PaymentStrategy(ABC): @abstractmethod def pay(self, amount: float) -> str: pass
#Конкретные стратегииclass CreditCardPayment(PaymentStrategy): def pay(self, amount: float) -> str: return f"Оплачено {amount} руб. кредитной картой"
class PayPalPayment(PaymentStrategy): def pay(self, amount: float) -> str: return f"Оплачено {amount} руб. через PayPal"
class CryptoPayment(PaymentStrategy): def pay(self, amount: float) -> str: return f"Оплачено {amount} руб. криптовалютой"
#Контекстclass PaymentProcessor: def init(self, strategy: PaymentStrategy): self._strategy = strategy
def set_strategy(self, strategy: PaymentStrategy): self._strategy = strategy
def execute_payment(self, amount: float) -> str: return self._strategy.pay(amount)
#Использованиеprocessor = PaymentProcessor(CreditCardPayment()) print(processor.execute_payment(1000)) # Оплачено 1000 руб. кредитной картой
processor.set_strategy(PayPalPayment()) print(processor.execute_payment(1500)) # Оплачено 1500 руб. через PayPal
processor.set_strategy(CryptoPayment()) print(processor.execute_payment(2000)) # Оплачено 2000 руб. криптовалютой #weekofpatterns`