Junior
44
questionbank

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

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

Конечно. Перечислю основные паттерны проектирования Java:

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

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

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

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

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

  • Chain of Responsibility: Позволяет передавать запросы последовательно по цепочке получателей.
  • Command: Инкапсулирует запрос в виде объекта, что позволяет параметризовать клиентов с различными запросами, ставить запросы в очередь или выполнять отмену операций.
  • Interpreter: Определяет объектный подход к интерпретации предложений в языке.
  • Iterator: Предоставляет способ последовательного доступа к элементам агрегированного объекта, не раскрывая его внутреннего представления.
  • Mediator: Определяет объект, который инкапсулирует, как набор объектов взаимодействует.
  • Memento: Позволяет сохранить и восстановить предыдущее состояние объекта без раскрытия деталей его реализации.
  • Observer: Определяет зависимость «один-ко-многим» между объектами так, что при изменении состояния одного объекта все зависящие от него объекты автоматически уведомляются и обновляются.
  • State: Позволяет объекту изменять свое поведение в зависимости от его внутреннего состояния.
  • Strategy: Определяет семейство алгоритмов, каждый из которых инкапсулируется в отдельный класс, и делает их взаимозаменяемыми.
  • Template Method: Определяет скелет алгоритма в операции, откладывая некоторые шаги до подклассов.
  • Visitor: Представляет операцию, которая должна быть выполнена над элементами структуры объектов. Позволяет определить новую операцию без изменения классов элементов, над которыми она оперирует.

Также знакомы с более специфичными паттернами, используемыми в конкретных областях разработки, таких как MVC, MVP, MVVM (для представления), а также паттернами интеграции (например, Publisher/Subscriber).