Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: design patterns, creational, structural, behavioral, GoF

Какие группы шаблонов проектирования существуют?

Вопрос проверяет знание классификации шаблонов проектирования (Design Patterns) по цели их применения, что необходимо для выбора правильного решения при проектировании архитектуры ПО.

Короткий ответ

Шаблоны проектирования делятся на три основные группы: порождающие (creational), структурные (structural) и поведенческие (behavioral). Порождающие шаблоны управляют созданием объектов, структурные определяют композицию классов и объектов, а поведенческие описывают взаимодействие между объектами. Эта классификация была предложена в книге "Банды четырёх" (GoF).

Длинный ответ

Основные группы шаблонов проектирования

Шаблоны проектирования — это типовые решения часто встречающихся проблем в объектно-ориентированном программировании. Они делятся на три основные категории, предложенные в книге "Design Patterns: Elements of Reusable Object-Oriented Software" (GoF).

Порождающие шаблоны (Creational)

Эти шаблоны абстрагируют процесс создания объектов, делая систему независимой от способа их создания и представления. Они помогают управлять сложностью создания объектов, особенно когда процесс требует дополнительной логики.

  • Singleton — гарантирует, что у класса есть только один экземпляр.
  • Factory Method — определяет интерфейс для создания объекта, но позволяет подклассам выбирать класс создаваемого экземпляра.
  • Abstract Factory — предоставляет интерфейс для создания семейств взаимосвязанных объектов.
  • Builder — отделяет конструирование сложного объекта от его представления.
  • Prototype — создаёт новые объекты путём копирования прототипа.

Структурные шаблоны (Structural)

Они определяют, как классы и объекты могут комбинироваться для образования более крупных структур. Эти шаблоны упрощают проектирование, показывая, как связать различные части системы.

  • Adapter — преобразует интерфейс одного класса в другой, ожидаемый клиентом.
  • Decorator — динамически добавляет объекту новые обязанности.
  • Facade — предоставляет простой интерфейс к сложной системе.
  • Proxy — предоставляет заменитель для управления доступом к объекту.
  • Composite — позволяет клиентам работать с отдельными объектами и их группами единообразно.

Поведенческие шаблоны (Behavioral)

Эти шаблоны описывают способы взаимодействия и распределения обязанностей между объектами. Они помогают реализовать сложные потоки управления, которые трудно отследить во время выполнения.

  • Observer — определяет зависимость "один ко многим" между объектами.
  • Strategy — определяет семейство алгоритмов и делает их взаимозаменяемыми.
  • Command — инкапсулирует запрос как объект.
  • Iterator — предоставляет способ последовательного доступа к элементам коллекции.
  • Template Method — определяет скелет алгоритма, перекладывая некоторые шаги на подклассы.

Пример кода: паттерн Strategy на JavaScript

// Определяем семейство алгоритмов сортировки
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]

Вывод: Знание групп шаблонов проектирования помогает разработчику быстрее находить подходящее решение для типовых задач, улучшает читаемость кода и облегчает коммуникацию в команде. Применяйте порождающие шаблоны для гибкого создания объектов, структурные — для построения связей между компонентами, а поведенческие — для организации взаимодействия между ними.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    3

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#design patterns

#creational

#structural

#behavioral

#GoF

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.