Чем 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 главное — помнить о глубине копирования, иначе клоны разделят вложенные объекты.