К основному содержанию
скилл CX Codex

factory-pattern — скилл для Claude Code: фабричные функции без new

Учит агента создавать объекты через фабричные функции. Пригодится, когда логика создания объектов зависит от конфигурации или окружения.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add PatternsDev/skills --skill factory-pattern -a claude-code
Открыть на GitHub

Что делает factory-pattern

Скилл объясняет фабричный паттерн в JavaScript и TypeScript: функция возвращает новый объект без ключевого слова new. Внутри — примеры на стрелочных функциях ES6, разбор случаев, когда паттерн уместен, и отдельный список ситуаций, где он только добавляет лишний слой. Агент подхватывает скилл на файлах **/*.js и **/*.ts.

Помимо базового createUser с полями firstName, lastName, email и методом fullName, в тексте есть пример фабрики, собирающей объект из пары ключ-значение. Есть и предупреждение: если важна экономия памяти, обычные классы выгоднее, потому что методы живут в прототипе, а не копируются в каждый объект. Это повод проверить, сколько экземпляров вы плодите.

Ставить стоит, если в проекте уже принят стиль без new или создание объектов завязано на окружение. Если команда ждёт классы и конструкторы, скилл будет спорить с конвенцией проекта. Установка идёт через npx skills add.

Какие задачи решает

  • создавать объекты без ключевого слова new
  • собрать объект из пары ключ-значение
  • вынести логику создания объектов в одно место
  • подстраивать набор полей объекта под конфигурацию окружения
  • решить, брать фабрику или класс с прототипными методами

Примеры запросов агенту

  • Перепиши создание пользователей на фабричную функцию без new
  • Сделай фабрику, которая собирает объект из массива ключ и значение
  • Проверь, где в этом файле фабрика лишняя и хватит литерала объекта

Как установить factory-pattern

1Через Skills CLI (Vercel)

npx skills add PatternsDev/skills --skill factory-pattern -a claude-code

2Вручную: положить файлы

~/.claude/skills/factory-pattern/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/factory-pattern/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о factory-pattern

Как установить factory-pattern в Claude?

Выполните npx skills add PatternsDev/skills --skill factory-pattern -a claude-code. Скилл окажется в ~/.claude/skills/factory-pattern/SKILL.md.

Что делает скилл factory-pattern?

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

Когда фабрику лучше не использовать?

Для простых объектов хватает литерала, а фабрика добавляет лишний слой. Если в проекте приняты классы и команда ждёт new, тоже лучше остаться на конструкторах.

Исходный текст

SKILL.md · MIT
---
name: factory-pattern
description: Teaches the factory pattern for flexible object creation. Use when you need to create objects dynamically without using the new keyword or when object creation logic should be centralized.
paths:
  - "**/*.js"
  - "**/*.ts"
license: MIT
metadata:
  author: patterns.dev
  version: "1.1"
related_skills:
  - "module-pattern"
  - "singleton-pattern"
---

# Factory Pattern

With the factory pattern we can use **factory functions** in order to create new objects. A function is a factory function when it returns a new object without the use of the `new` keyword!

Say that we need many users for our application. We can create new users with a `firstName`, `lastName`, and `email` property. The factory function adds a `fullName` property to the newly created object as well, which returns the `firstName` and the `lastName`.

## When to Use

- Use this when you need to create multiple objects that share the same properties
- This is helpful when object creation depends on a certain environment or configuration

## When NOT to Use

- For simple objects where a plain object literal suffices — a factory adds unnecessary indirection
- When class constructors are the established convention in your project and the team expects `new`
- When there's no conditional logic or configuration driving object creation

## Instructions

- Use factory functions to return custom objects based on current environment or user-specific configuration
- Prefer ES6 arrow functions for concise factory function definitions
- Consider using class constructors instead when memory efficiency matters, as instances share prototype methods

## Details

```js
const createUser = ({ firstName, lastName, email }) => ({
  firstName,
  lastName,
  email,
  fullName() {
    return `${this.firstName} ${this.lastName}`;
  },
});
```

Perfect! We can now easily create multiple users by invoking the `createUser` function.

The factory pattern can be useful if we're creating relatively complex and configurable objects. It could happen that the values of the keys and values are dependent on a certain environment or configuration. With the factory pattern, we can easily create new objects that contain the custom keys and values!

```js
const createObjectFromArray = ([key, value]) => ({
  [key]: value,
});

createObjectFromArray(["name", "John"]); // { name: "John" }
```

### Pros

The factory pattern is useful when we have to create multiple smaller objects that share the same properties. A factory function can easily return a custom object depending on the current environment, or user-specific configuration.

### Cons

In JavaScript, the factory pattern isn't much more than a function that returns an object without using the `new` keyword. ES6 arrow functions allow us to create small factory functions that implicitly return an object each time.

However, in many cases it may be more memory efficient to create new instances instead of new objects each time.

```js
class User {
  constructor(firstName, lastName, email) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.email = email;
  }

  fullName() {
    return `${this.firstName} ${this.lastName}`;
  }
}

const user1 = new User({
  firstName: "John",
  lastName: "Doe",
  email: "[email protected]",
});

const user2 = new User({
  firstName: "Jane",
  lastName: "Doe",
  email: "[email protected]",
});
```

## Source

- [patterns.dev/vanilla/factory-pattern](https://patterns.dev/vanilla/factory-pattern)

### References

- [JavaScript Factory Functions with ES6+](https://medium.com/javascript-scene/javascript-factory-functions-with-es6-4d224591a8b1) - Eric Elliott

© patterns.dev · MIT · PatternsDev/skills

Похожие скиллы

Все скиллы по теме «Языки программирования» →
dotnet-design-pattern-review официальный github Проверяет выбранный C#/.NET-код на применение паттернов проектирования и предлагает правки без изменения файлов. Подходит для ревью архитектуры проекта. 11 609установок pattern-library Owl-Listener Скилл оформляет повторяющиеся UX-решения как записи паттернов: от проблемы и решения до примеров, доступности и связанных паттернов. CX Codex +1 2 100установок design-patterns-implementation aj-geddes Помогает агенту подобрать паттерн под архитектурную задачу: Singleton, Factory, Observer, Strategy и другие. Пригодится при рефакторинге и разборе ревью. CX Codex +1 595установок typescript-expert sickn33 Скилл для работы с TypeScript и JavaScript: разбирает типы, ускоряет проверку и помогает с миграциями. Пригодится, когда проект на TS растёт и компилятор начинает тормозить. CX Codex +1 12 600установок ultracite haydenbleasel Скилл ultracite настраивает линтинг и форматирование JS/TS-проектов через Oxlint, Biome или ESLint одной командой. CX Codex +1 11 400установок coding-standards affaan-m Базовые правила кода для проектов: проверяет именование, запрещает мутации объектов и следит за простыми конструкциями. Пригодится на ревью и рефакторинге. CX Codex +1 5 700установок

Из того же набора44

vite-bundle-optimization Скилл с паттернами оптимизации бандла и сборки в Vite + React. Пригодится, когда билд тормозит или чанки выходят больше ожидаемого. CX Codex +1 667установок command-pattern Обучает агента паттерну «Команда» для JavaScript и TypeScript. Помогает разделить вызов операции и её выполнение, настроить очередь задач или историю отмены. CX Codex +1 645установок singleton-pattern Обучает реализации паттерна «Одиночка» в JavaScript и TypeScript для создания единого экземпляра класса. Пригодится при настройке общих ресурсов или глобальной конфигурации. CX Codex +1 637установок observer-pattern Скилл объясняет паттерн наблюдателя и подсказывает агенту, как строить слабосвязанную подписку на события в JS и TS. CX Codex +1 638установок module-pattern Обучает ИИ-агента делить JavaScript и TypeScript на изолированные модули через ES2015. Помогает скрыть внутренние переменные и настроить чистый экспорт. CX Codex +1 631установок islands-architecture Скилл объясняет паттерн островной архитектуры и частичной гидратации. Пригодится, когда страница почти вся статичная, а интерактив нужен точечно. CX Codex +1 624установок provider-pattern Учит агента выносить общие данные в React Context и раздавать их через Provider, когда пропсы приходится тянуть через десяток компонентов. CX Codex +1 620установок proxy-pattern Скилл объясняет паттерн Proxy в JavaScript: перехват чтения и записи свойств объекта, валидация и логирование. Пригодится, когда агенту нужно править такой код. CX Codex +1 612установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой