Найти тему

Программирование. Паттерн проектирования: Стратегия (Strategy)

Всем привет!
В данной статье рассмотрим популярный шаблон проектирования: "
Стратегия".

Сгенерированное изображение
Сгенерированное изображение

Данный шаблон проектирования (далее паттерн), известный еще как паттерн Политика (pattern Policy) . Стратегия относится к группе паттернов поведения (Как правило, паттерны поведения описывают способы коммуникации между объектами, они реализуют сложные алгоритмы управления, которые обычно трудно отследить во время выполнения программы).

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

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

Пример.

--------------------------------------------------------------------------------------------

Задача: Есть массив целых чисел, в зависимости от ситуации данный массив должен быть отсортирован определенным алгоритмом сортировки.

# Метод (sort_array) принимает в себя две сигнатуры:

# int[] array_to_sort - массив который нужно отсортировать

# IStrategy strategy - стратегия сортировки (например пузырьком, слиянием, от большего к меньшему и т.д.)

sort_array(int[] array_to_sort, IStrategy strategy)
{
strategy.Sort(array_to_sort); }

#в качестве примера показаны два инкапсулированных объекта (класса), каждый из которых реализует общий интерфейс - сигнатуру вызова Sort(int[]) (тот метод который будут использовать в вызываемом коде)

object SortBubble : IStrategy { Sort(int[] array) { // bubble sort algorithm } };

object SortMerge : IStrategy { Sort(int[] array) { // merge sort algorithm } };

# общий интерфейс вызова

IStrategy { Sort(int[]) }

Реализация:

int[] arr =[ 4, 6, 2, 7 ] # массив для сортировки

set_strategy(case somthing_happend)

{

# если что-то происходит, то вызывается SortBubble алгоритм

if(somthing_happend) { sort_array(arr, SortBubble) }

# если ничего не происходит, то вызывается SortMerge алгоритм

else { sort_array(arr, SortMerge)}

}

--------------------------------------------------------------------------------------------

В выше обозначенном примере, мы увидели, что паттерн Стратегия выносит алгоритмы в собственные классы и обеспечивает единый интерфейс взаимодействия с этими алгоритмами для вызывающего кода.

--------------------------------------------------------------------------------------------
Подписывайтесь на
телеграмм канал.

Спасибо за внимание!