Skip to content

Latest commit

 

History

History
66 lines (44 loc) · 2.22 KB

File metadata and controls

66 lines (44 loc) · 2.22 KB

Паттерн Стратегия

Паттерн Стратегия - поведенческий.

Меняет алгоритм (стратегию) в зависимости от запроса клиента.

Tip

Допустим у нас есть навигатор (интерфейс, через который мы будем обращаться к алгоритмам).

В навигаторе мы можем выбрать способ добраться до цели: машиной, велосипедом или автобусом.

После выбора одной реализации из множества, выполняем ее и выводим ее результат.

Important

ВАЖНО: Сам навигатор не знает, какой способ добраться он сейчас реализует и вызывает. Он просто получает стратегию и говорит ей выполниться.

from abc import ABC, abstractmethod


class RouteStrategy(ABC):
    @abstractmethod
    def build_route(self, start, end):
        pass


class CarRoute(RouteStrategy):
    def build_route(self, start, end):
        print(f"Машиной от {start} до {end}.")


class BikeRoute(RouteStrategy):
    def build_route(self, start, end):
        print(f"Велосипедом от {start} до {end}.")


class BusRoute(RouteStrategy):
    def build_route(self, start, end):
        print(f"Автобусом от {start} до {end}.")


class Navigator:
    def __init__(self, strategy: RouteStrategy):
        self.strategy = strategy

    def set_strategy(self, strategy: RouteStrategy):
        self.strategy = strategy

    def navigate(self, start, end):
        self.strategy.build_route(start, end)


navigator = Navigator(CarRoute())
navigator.navigate("Дом", "Работа")

navigator.set_strategy(BikeRoute())
navigator.navigate("Парк", "Кафе")

navigator.set_strategy(BusRoute())
navigator.navigate("Университет", "Библиотека")

# output:
# Машиной от Дом до Работа.
# Велосипедом от Парк до Кафе.
# Автобусом от Университет до Библиотека.