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

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

Порождающие (Creational)
Связаны с процессом создания объектов, делая систему более независимой от способа создания, композиции и представления объектов.

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

Структурные (Structural)
Описывают, как объединить объекты и классы в более крупные структуры, сохраняя при этом гибкость и эффективность структур.

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

Поведенческие (Behavioral)
В основном описывают не столько шаблоны объектов или классов, сколько шаблоны взаимодействия между ними.

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

Каждый паттерн проектирования решает определённую проблему и может быть применим в различных ситуациях в зависимости от особенностей проекта и требований к нему.

April 5, 2024, easyoffer