Получить доступ

Какую задачу решают порождающие паттерны?

JuniorПаттерны проектирования
Ещё спрашивают так:
  • Какие порождающие паттерны вы знаете?
  • Что такое Builder и Factory?
  • Чем плох Singleton?
Коротко

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

  • Factory Method, Abstract Factory, Builder, Prototype, Singleton
  • Builder — для объектов с многими параметрами; фабрика — выбор реализации в одном месте

А ещё Singleton — глобальное состояние: мешает тестам; в Spring его роль играет бин

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Прямой new ConcreteClass() в коде жёстко связывает его с конкретной реализацией: заменить её или подставить заглушку в тесте трудно. Порождающие паттерны выносят создание в отдельное место.

  • Factory Method / статическая фабрика — метод решает, какой объект создать: List.of(...), Executors.newFixedThreadPool(...).
  • Abstract Factory — семейство связанных объектов: фабрика компонентов интерфейса для разных платформ.
  • Builder — пошаговое создание объекта с многими параметрами, часть из которых необязательна. Читается лучше конструктора с десятью аргументами: HttpRequest.newBuilder().uri(...).timeout(...).build().
  • Prototype — создание копированием готового объекта.
  • Singleton — единственный экземпляр класса. Самый спорный: по сути глобальное состояние, скрытые зависимости, трудно тестировать. В приложениях на Spring эту роль выполняют бины-синглтоны, которые внедряются явно.

Две другие группы GoF-паттернов: структурные (как объекты собираются в конструкции) и поведенческие (как распределяются обязанности).

Пример

Pizza pizza = Pizza.builder()
        .size(Size.LARGE)
        .addTopping("cheese")
        .addTopping("mushrooms")
        .build();

Что хотят услышать

  • Задача группы: отделить клиента от конкретных классов.
  • Несколько паттернов с примерами, особенно Builder и фабрика.
  • Критика Singleton — плюс.
  • Знание трёх групп паттернов.

Частые ошибки

  • Применять паттерн там, где достаточно обычного конструктора.
  • Путать три группы паттернов между собой.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Отделяют клиента от конкретных классов создаваемых объектов, делая создание гибким
  • ✗Описывают, как объекты обмениваются сообщениями между собой
  • ✗Определяют способ объединения объектов в более крупные структуры
  • ✗Управляют жизненным циклом потоков выполнения

Что спросят дальше

  • Чем фабричный метод отличается от статической фабрики?
  • Зачем нужен билдер при создании неизменяемых объектов?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем