Вопрос проверяет знание классификации шаблонов проектирования (Design Patterns) по цели их применения, что необходимо для выбора правильного решения при проектировании архитектуры ПО.
Шаблоны проектирования — это типовые решения часто встречающихся проблем в объектно-ориентированном программировании. Они делятся на три основные категории, предложенные в книге "Design Patterns: Elements of Reusable Object-Oriented Software" (GoF).
Эти шаблоны абстрагируют процесс создания объектов, делая систему независимой от способа их создания и представления. Они помогают управлять сложностью создания объектов, особенно когда процесс требует дополнительной логики.
Они определяют, как классы и объекты могут комбинироваться для образования более крупных структур. Эти шаблоны упрощают проектирование, показывая, как связать различные части системы.
Эти шаблоны описывают способы взаимодействия и распределения обязанностей между объектами. Они помогают реализовать сложные потоки управления, которые трудно отследить во время выполнения.
// Определяем семейство алгоритмов сортировки
class BubbleSort {
sort(data) {
console.log('Сортировка пузырьком');
return data.sort((a, b) => a - b);
}
}
class QuickSort {
sort(data) {
console.log('Быстрая сортировка');
if (data.length <= 1) return data;
const pivot = data[0];
const left = data.slice(1).filter(x => x < pivot);
const right = data.slice(1).filter(x => x >= pivot);
return [...this.sort(left), pivot, ...this.sort(right)];
}
}
// Контекст, использующий стратегию
class Sorter {
constructor(strategy) {
this.strategy = strategy;
}
sort(data) {
return this.strategy.sort(data);
}
}
// Использование
const data = [3, 1, 4, 1, 5];
const sorter = new Sorter(new QuickSort());
console.log(sorter.sort(data)); // [1, 1, 3, 4, 5]Вывод: Знание групп шаблонов проектирования помогает разработчику быстрее находить подходящее решение для типовых задач, улучшает читаемость кода и облегчает коммуникацию в команде. Применяйте порождающие шаблоны для гибкого создания объектов, структурные — для построения связей между компонентами, а поведенческие — для организации взаимодействия между ними.