工厂函数通过封装对象创建逻辑实现批量定制化生产,接受参数动态生成结构一致的新对象,支持默认值、校验、异步初始化及私有状态闭包,比构造函数更轻量灵活。

工厂函数批量生产相似对象,核心是把创建逻辑封装成可复用的函数,每次调用返回一个新对象,避免重复写 {} 和赋值语句。
用参数控制对象属性,实现“定制化批量”
工厂函数接受参数,动态生成不同但结构一致的对象。比如创建多个用户:
- 定义函数时明确哪些属性会变化(如
name、role),哪些固定(如isActive: true) - 函数体内直接返回新对象,不使用
new或this - 示例:
const createUser = (name, role) => ({ name, role, isActive: true, createdAt: new Date(), greet() { return `Hello, I'm ${this.name}`; } }); - 批量调用:
createUser('Alice', 'admin')、createUser('Bob', 'user'),每个都是独立对象,方法也不共享引用
结合数组 map 或循环,真正“批量”生成
单个工厂函数只是模板,配合数组处理才能高效产出多个实例:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 从原始数据数组出发,用
map一次性生成对象数组:const userData = [['Alice', 'admin'], ['Bob', 'user'], ['Charlie', 'editor']];<br>const users = userData.map(([name, role]) => createUser(name, role));
- 需要带默认值或校验时,在工厂函数内部处理,不影响外部调用方式
- 如果需异步初始化(如加载头像 URL),工厂函数可返回 Promise,再用
Promise.all批量等待
与构造函数、类的区别:更轻量、更灵活
工厂函数不依赖 new,也没有原型链隐式绑定,适合以下场景:
立即学习“Java免费学习笔记(深入)”;
- 对象行为差异大,不想共用方法(避免修改原型影响所有实例)
- 需要返回不同类型的对象(比如根据参数返回普通对象或带额外方法的对象)
- 逻辑简单,不想引入类的语法开销,也不需继承体系
- 配合模块导出时更直观:
export const createButton = (text) => ({ text, type: 'button' })
进阶:返回带私有状态的闭包对象
利用作用域隔离,让每个对象拥有独立的私有变量:
const createCounter = (initial = 0) => { let count = initial; // 每次调用都新建一个 count 变量 return { increment() { count++; }, getValue() { return count; } }; };-
const a = createCounter(10); const b = createCounter(100);——a和b的count完全隔离 - 这种模式天然支持封装,无需 Symbol 或 # 私有字段

















