PassFront
  1. PassFront
  2. База знаний
  3. Порождающие паттерны

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

Порождающие паттерны

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

Builder

const { url, init } = new RequestBuilder('/api/users')
  .query('role', 'admin')
  .query('page', 2) // → ?role=admin&page=2 через URLSearchParams
  .header('Accept', 'application/json')
  .timeout(5000) // → init.signal = AbortSignal.timeout(5000)
  .build();
const users = await fetch(url, init).then((r) => r.json());
  • Читаемая конфигурация вместо конструктора на десять параметров.
  • Пошаговость позволяет валидировать промежуточные состояния и переиспользовать этапы.

Prototype

  • Метод clone() копирует готовый объект: удобно, когда создание дорого или конфигурации хранятся как живые экземпляры.
  • Главный подвох — глубина копирования: shallow copy делит вложенные объекты с оригиналом.

Когда что выбирать

  • Много необязательных параметров и разные «рецепты» сборки — Builder.
  • Объект уже существует и нужны его вариации — Prototype.

Коротко для собеседования

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

Другие вопросы раздела