mcpField
F
factory-pattern

factory-pattern

github.com/patternsdev开发257635 次安装28 周前更新
代码仓库

关于 factory-pattern

这是一份 JavaScript 设计模式指南,介绍如何通过不使用 `new` 的工厂函数创建对象。适合需要创建多个或可配置对象的开发者,并说明何时更适合使用对象字面量或类构造函数。

主要功能

  1. 01无需使用 `new` 创建对象
  2. 02创建具有共享属性的对象
  3. 03根据配置定制对象
  4. 04比较工厂函数与构造函数的适用场景

适用场景

  1. 01创建带有 fullName 方法的用户对象
  2. 02根据环境设置构建对象
  3. 03将数组条目映射为对象属性

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/patternsdev/skills --skill factory-pattern

安装后在 Claude Code 中输入/factory-pattern确认已加载。

详细介绍

工厂模式

使用工厂模式,我们可以通过工厂函数来创建新对象。如果一个函数在不使用 new 关键字的情况下返回一个新对象,那么它就是工厂函数!

假设我们的应用需要很多用户。我们可以创建包含 firstName、lastName 和 email 属性的新用户。工厂函数还会为新创建的对象添加 fullName 属性,该属性会返回 firstName 和 lastName。

适用场景

  • 需要创建多个具有相同属性的对象时
  • 对象的创建取决于特定环境或配置时

不适用场景

  • 对于使用普通对象字面量就足够的简单对象,工厂会带来不必要的间接性
  • 如果类构造函数是项目中约定俗成的方式,且团队习惯使用 new
  • 如果对象创建不受条件逻辑或配置影响

说明

  • 使用工厂函数,根据当前环境或用户专属配置返回自定义对象
  • 优先使用 ES6 箭头函数,以简洁地定义工厂函数
  • 如果注重内存效率,可以考虑改用类构造函数,因为实例会共享原型方法

详情

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

太好了!现在,我们只需调用 createUser 函数,就可以轻松创建多个用户。

如果我们要创建相对复杂且可配置的对象,工厂模式会很有用。键和值可能取决于特定环境或配置。借助工厂模式,我们可以轻松创建包含自定义键和值的新对象!

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

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

当我们需要创建多个具有相同属性的小型对象时,工厂模式很有用。工厂函数可以根据当前环境或用户专属配置,轻松返回自定义对象。

缺点

在 JavaScript 中,工厂模式不过是一个不使用 new 关键字来返回对象的函数。ES6 箭头函数允许我们创建简短的工厂函数,每次调用时都会隐式返回一个对象。

不过,在很多情况下,创建新实例比每次都创建新对象更加节省内存。

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]",
});

来源

参考资料

评论

支持 Markdown