Паттерн Стратегия (Strategy) — это поведенческий паттерн проектирования, который определяет семейство алгоритмов, инкапсулирует каждый из них и делает их взаимозаменяемыми. Он позволяет клиенту менять алгоритм независимо от контекста его использования.
Основные компоненты паттерна:
- Strategy (Стратегия): Интерфейс или абстрактный класс, объявляющий общий метод для всех поддерживаемых алгоритмов.
- Concrete Strategy (Конкретная Стратегия): Классы, реализующие интерфейс Strategy и содержащие конкретную реализацию определенного алгоритма.
- Context (Контекст): Класс, который содержит ссылку на объект типа Strategy и делегирует ему выполнение алгоритма. Контекст не знает specifics конкретной стратегии, он работает только с интерфейсом Strategy.
Как используется:
- Определяется семейство связанных алгоритмов.
- Создается интерфейс или абстрактный класс Strategy, который определяет единый метод для выполнения этих алгоритмов.
- Создаются Concrete Strategy классы, реализующие этот интерфейс/абстрактный класс и содержащие конкретные реализации алгоритмов.
- Создается класс Context, который имеет поле для хранения ссылки на объект Strategy и метод для выполнения алгоритма, делегируя вызов этому объекту.
- Клиентский код создает объекты Context и Concrete Strategy, затем передает нужный объект Strategy в Context для выполнения конкретного алгоритма.
Преимущества:
- Позволяет независимо менять алгоритмы без изменения кода Context.
- Инкапсулирует каждый алгоритм в отдельный класс, что улучшает читаемость и модульность.
- Позволяет легко добавлять новые алгоритмы.
Пример:
python