Middle
57
questionbank

Какие паттерны проектирования вы знаете?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

Порождающие:

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

Структурные:

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

Поведенческие:

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

Помимо шаблонных (GoF) паттернов также существуют другие категории, например, корпоративные паттерны интеграции или микросервисные паттерны. Кроме того, часто используются архитектурные паттерны, такие как MVC, MVP, MVVM.