工厂函数通过闭包封装私有状态,每次调用生成独立作用域实现隔离;返回对象的方法共享同一闭包内的变量,保障状态一致性;可结合高阶函数捕获参数定制行为;需注意闭包导致的内存驻留问题。

工厂函数借助闭包封装,核心是把想隐藏的数据放在外部函数的局部作用域里,只通过返回的对象或函数间接访问它。每次调用工厂函数,都会生成一个独立的作用域和对应的闭包环境,从而实现状态隔离与私有性。
用局部变量保存私有状态
在工厂函数内部用 let 或 const 声明变量,这些变量不会暴露到外部,只能被返回的函数访问。
- 例如创建用户管理器时,
_name和_email是私有字段,外界无法直接读取或修改 - 所有操作都必须通过返回对象上的方法(如
getName()、updateEmail())进行 - 即使多个实例同时存在,它们各自的私有变量互不影响
返回对象中方法共享同一闭包
工厂函数返回的对象里,所有方法都定义在同一个外层函数作用域下,因此能共用同一组私有变量。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 比如
inc()和reset()都能读写同一个count - 这种结构天然支持“状态一致性”,不需要额外同步逻辑
- 避免了把状态挂到 this 上可能引发的 this 绑定问题
结合高阶函数动态定制行为
闭包还能捕获配置参数,让工厂函数产出带不同行为的实例。
- 像表单验证规则中,
required('必填')返回一个闭包函数,记住错误提示文本 - 再比如
createCarFactory("V8", "red")记住引擎类型和颜色,后续每次调用都复用这些值 - 参数一旦传入就固化在闭包中,后续调用无需重复传递
注意内存与生命周期管理
闭包会让外部变量持续驻留内存,直到没有引用指向该闭包为止。
- 如果工厂函数返回的实例长期存活,其私有变量也会一直保留
- 避免在循环或高频事件中无节制创建闭包,防止内存堆积
- 必要时可主动解除引用(如将返回对象设为
null),协助垃圾回收
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










