Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: Builder, Factory, creational patterns, design patterns, object creation

Чем Builder отличается от Factory?

Вопрос проверяет понимание различий между порождающими паттернами Builder и Factory, их назначения и сценариев применения.

Короткий ответ

Builder и Factory — порождающие паттерны, но решают разные задачи. Factory создаёт объект целиком за один вызов, скрывая логику инстанцирования. Builder пошагово конструирует сложный объект, позволяя настраивать его части. Factory подходит для простых объектов с вариациями, Builder — для объектов с множеством параметров или сложной сборкой.

Длинный ответ

Основное различие между Builder и Factory

Оба паттерна относятся к порождающим, но их цели различаются. Factory (или Factory Method) предоставляет интерфейс для создания объекта, делегируя подклассам решение о том, какой класс инстанцировать. Builder же отделяет конструирование сложного объекта от его представления, позволяя одному и тому же процессу построения создавать разные представления.

Когда использовать Factory

Factory применяется, когда нужно создать объект одного из нескольких возможных типов, и выбор зависит от контекста. Например, создание разных видов документов (PDF, Word, HTML) через единый интерфейс. Клиент получает готовый объект без знания деталей его создания.

// Пример Factory Method на JavaScript
class DocumentFactory {
  createDocument(type) {
    switch(type) {
      case 'pdf': return new PDFDocument();
      case 'word': return new WordDocument();
      default: throw new Error('Unknown type');
    }
  }
}
const factory = new DocumentFactory();
const doc = factory.createDocument('pdf');

Когда использовать Builder

Builder полезен, когда объект имеет много параметров или требует сложной последовательности шагов для создания. Например, построение SQL-запроса, HTML-формы или объекта с необязательными полями. Builder позволяет накапливать настройки и в конце получить результат.

// Пример Builder на JavaScript
class QueryBuilder {
  constructor() {
    this.query = '';
  }
  select(fields) {
    this.query += `SELECT ${fields} `;
    return this;
  }
  from(table) {
    this.query += `FROM ${table} `;
    return this;
  }
  where(condition) {
    this.query += `WHERE ${condition}`;
    return this;
  }
  build() {
    return this.query;
  }
}
const query = new QueryBuilder()
  .select('name, age')
  .from('users')
  .where('age > 18')
  .build();

Ключевые отличия

  • Factory возвращает готовый объект за один вызов, Builder — после серии шагов.
  • Factory скрывает логику выбора класса, Builder скрывает логику сборки.
  • Builder часто использует текучий интерфейс (method chaining), Factory — нет.
  • Builder подходит для объектов с множеством опциональных параметров, Factory — для полиморфного создания.

Вывод: используйте Factory, когда нужно создать объект одного из семейств классов, и Builder — когда объект сложный и его конфигурация может варьироваться. Оба паттерна улучшают читаемость и поддерживаемость кода, но решают разные проблемы.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#Builder

#Factory

#creational patterns

#design patterns

#object creation

Подпишись на Java Developer в телеграм