Какую задачу решают порождающие паттерны?
- Какие порождающие паттерны вы знаете?
- Что такое Builder и Factory?
- Чем плох Singleton?
Порождающие паттерны отделяют клиента от конкретных классов создаваемых объектов: создание прячут за фабрикой или билдером.
- Factory Method, Abstract Factory, Builder, Prototype, Singleton
- Builder — для объектов с многими параметрами; фабрика — выбор реализации в одном месте
А ещё Singleton — глобальное состояние: мешает тестам; в Spring его роль играет бин
Подробно
Прямой 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 — плюс.
- Знание трёх групп паттернов.
Частые ошибки
- Применять паттерн там, где достаточно обычного конструктора.
- Путать три группы паттернов между собой.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Описывают, как объекты обмениваются сообщениями между собой
- ✗Определяют способ объединения объектов в более крупные структуры
- ✗Управляют жизненным циклом потоков выполнения
- ✓Отвязывают клиента от конкретных создаваемых классов
Что спросят дальше
- Чем фабричный метод отличается от статической фабрики?
- Зачем нужен билдер при создании неизменяемых объектов?
Разбор темы
- Порождающие паттерны
Factory Method против статической фабрики Блоха, Abstract Factory, Builder в двух версиях, Prototype и почему clone() считают ошибкой, object pool — с примерами из JDK и Spring.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.