Стратегия - это паттерн, который определяет семейство алгоритмов, инкапсулирует каждый из них и делает их взаимозаменяемыми.

Стоит использовать когда нужно использовать разные варианты одного алгоритма, когда есть несколько похожих классов, отличающихся только поведением и для замены громоздких условных операторов.

`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`