Как реализовать паттерн стратегия в Python
Python
Middle
Без компании
Как реализовать паттерн стратегия в Python
Ответы
Паттерн Стратегия позволяет выбирать алгоритм во время выполнения программы, инкапсулируя их в отдельные классы.
```
from abc import ABC, abstractmethod
class Strategy(ABC):
@abstractmethod
def execute(self, data):
pass
class ConcreteStrategyA(Strategy):
def execute(self, data):
return sorted(data)
class ConcreteStrategyB(Strategy):
def execute(self, data):
return sorted(data, reverse=True)
class Context:
def __init__(self, strategy: Strategy):
self._strategy = strategy
def set_strategy(self, strategy: Strategy):
self._strategy = strategy
def execute_strategy(self, data):
return self._strategy.execute(data)
# Использование
data = [5, 2, 8, 1]
context = Context(ConcreteStrategyA())
print(context.execute_strategy(data)) # [1, 2, 5, 8]
context.set_strategy(ConcreteStrategyB())
print(context.execute_strategy(data)) # [8, 5, 2, 1]
```
Ключевые моменты:
- Абстрактный класс Strategy определяет интерфейс алгоритмов
- Конкретные стратегии реализуют этот интерфейс
- Context хранит ссылку на стратегию и делегирует ей работу
- Стратегию можно менять динамически через set_strategy()