Всем привет!
В данной статье рассмотрим популярный шаблон проектирования: "Стратегия".
Данный шаблон проектирования (далее паттерн), известный еще как паттерн Политика (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)}
}
--------------------------------------------------------------------------------------------
В выше обозначенном примере, мы увидели, что паттерн Стратегия выносит алгоритмы в собственные классы и обеспечивает единый интерфейс взаимодействия с этими алгоритмами для вызывающего кода.
--------------------------------------------------------------------------------------------
Подписывайтесь на телеграмм канал.
Спасибо за внимание!