Паттерн Стратегия позволяет определять семейства алгоритмов и выбирать их в зависимости от условий во время выполнения.
Паттерн Стратегия даёт возможность переключаться между различными алгоритмами без изменения основного кода. Это достигается путём инкапсуляции алгоритмов в отдельных классах.
Паттерн Стратегия используется, чтобы упростить выбор из множества алгоритмов. Он позволяет отделить их реализацию от основного кода, заменяя сложные условные конструкции.
Пример из реальной жизни:
Представьте курьера, который выбирает способ доставки в зависимости от расстояния: пешком, на велосипеде или на машине. Курьер (контекст) остаётся неизменным, а способ доставки (стратегия) можно менять.
Реализация в Python:
class WalkingStrategy:
def deliver(self):
print("Доставка пешком.")
class CyclingStrategy:
def deliver(self):
print("Доставка на велосипеде.")
class DrivingStrategy:
def deliver(self):
print("Доставка на автомобиле.")
class DeliveryContext:
def __init__(self, strategy):
self.strategy = strategy
def set_strategy(self, strategy):
self.strategy = strategy
def deliver_package(self):
self.strategy.deliver()
# Использование
context = DeliveryContext(WalkingStrategy())
context.deliver_package()
context.set_strategy(CyclingStrategy())
context.deliver_package()Когда использовать:
Когда нужно заменить алгоритм во время выполнения программы.
Для уменьшения сложности условных конструкций.