Вопрос проверяет знание классификации паттернов проектирования и понимание места паттерна Стратегия в общей системе паттернов GoF.
Паттерн Стратегия (Strategy) — это поведенческий паттерн проектирования, который входит в классическую коллекцию паттернов GoF (Gang of Four). Поведенческие паттерны решают задачи эффективного взаимодействия между объектами, распределения обязанностей и управления алгоритмами.
Стратегия позволяет выделить семейство схожих алгоритмов, поместить каждый в отдельный класс и сделать их взаимозаменяемыми. Клиентский код может выбирать нужную стратегию динамически, во время выполнения программы.
// Интерфейс стратегии
class SortStrategy {
sort(data) { throw new Error('Must implement'); }
}
// Конкретные стратегии
class BubbleSort extends SortStrategy {
sort(data) {
console.log('Сортировка пузырьком');
return data.sort((a, b) => a - b);
}
}
class QuickSort extends SortStrategy {
sort(data) {
console.log('Быстрая сортировка');
return data.sort((a, b) => a - b);
}
}
// Контекст
class Sorter {
constructor(strategy) {
this.strategy = strategy;
}
setStrategy(strategy) {
this.strategy = strategy;
}
sort(data) {
return this.strategy.sort(data);
}
}
// Использование
const sorter = new Sorter(new BubbleSort());
sorter.sort([3, 1, 2]);
sorter.setStrategy(new QuickSort());
sorter.sort([3, 1, 2]);Вывод: Паттерн Стратегия стоит применять, когда у вас есть несколько вариантов поведения, которые могут меняться во время выполнения, и вы хотите избежать громоздких условных конструкций, сделав код гибким и расширяемым.