Встречается на собеседованиях • сегодня

Какие паттерны знаешь

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

1. Порождающие паттерны
Отвечают за удобное и безопасное создание новых объектов или даже целых семейств объектов.

  • Абстрактная фабрика (Abstract Factory): предоставляет интерфейс для создания семейств взаимосвязанных или зависимых объектов без указания их конкретных классов.
  • Фабричный метод (Factory Method): определяет интерфейс для создания объекта, но оставляет подклассам решение о том, какой класс инстанцировать. Позволяет делегировать инстанцирование подклассам.
  • Строитель (Builder): отделяет конструирование сложного объекта от его представления, так что один и тот же процесс конструирования может создать разные представления.
  • Прототип (Prototype): создаёт объект на основе шаблона или прототипа через клонирование.
  • Одиночка (Singleton): гарантирует, что класс имеет только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру.

2. Структурные паттерны
Помогают сформировать большие структуры объектов для обеспечения гибкости и эффективной архитектуры.

  • Адаптер (Adapter): позволяет объектам с несовместимыми интерфейсами работать вместе.
  • Мост (Bridge): разделяет абстракцию и реализацию так, что они могут изменяться независимо.
  • Компоновщик (Composite): компонует объекты в древовидные структуры для представления иерархии от части к целому.
  • Декоратор (Decorator): добавляет новые обязанности объектам на лету без изменения их интерфейса.
  • Фасад (Facade): предоставляет единый интерфейс к набору интерфейсов в подсистеме, упрощая её для пользователя.
  • Легковес (Flyweight): минимизирует использование памяти или вычислительные затраты путём разделения как можно большего количества данных с подобными объектами.
  • Заместитель (Proxy): предоставляет заменитель или местодержитель для другого объекта для контроля доступа к нему.

3. Поведенческие паттерны
Регулируют взаимодействие между объектами, улучшая коммуникацию и делегирование обязанностей.

  • Цепочка обязанностей (Chain of Responsibility): передаёт запросы последовательно по цепочке обработчиков, пока один из них не обработает запрос.
  • Команда (Command): инкапсулирует запрос в объект, позволяя поддерживать параметризованные операции, очередь запросов и их отмену.
  • Интерпретатор (Interpreter): определяет грамматическое представление для языка и интерпретатор для его грамматики.
  • Итератор (Iterator): предоставляет способ последовательного доступа к элементам агрегата без раскрытия его внутреннего представления.
  • Посредник (Mediator): уменьшает связанность множества классов, обеспечивая единственную точку коммуникации между ними.
  • Хранитель (Memento): без нарушения инкапсуляции захватывает и внешне сохраняет внутреннее состояние объекта так, чтобы позже объект мог быть восстановлен в этом состоянии.
  • Наблюдатель (Observer): создаёт механизм подписки, позволяющий одним объектам следить и реагировать на события, происходящие в других объектах.
  • Состояние (State): позволяет объекту изменять своё поведение при изменении своего внутреннего состояния.
  • Стратегия (Strategy): определяет семейство алгоритмов, инкапсулирует каждый из них и обеспечивает их взаимозаменяемость.
  • Шаблонный метод (Template Method): определяет скелет алгоритма в методе, откладывая некоторые шаги на выполнение в подклассах.
  • Посетитель (Visitor): позволяет добавлять новые операции без изменения классов элементов, над которыми эти операции могут выполняться.

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

April 7, 2024, easyoffer

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы