Class静态工厂实现对象池的核心是封装创建、复用与回收逻辑:通过static create()从池取或新建对象,实例提供release()归还并限容,reset与构造需状态一致以确保对象干净可用。

用 Class 静态工厂实现对象池,核心是把对象的创建、复用和回收逻辑封装在类内部,避免重复实例化开销,同时保证线程安全(如需)和生命周期可控。
静态工厂方法负责对象供给
在类中定义一个 static create() 方法,作为统一入口。它不直接 new 实例,而是先尝试从空闲池中取,取不到才新建:
- 维护一个数组或栈(如
static #pool = [])存放可复用对象 -
create()先检查池是否非空,有则 pop 并重置状态(如清空属性、重置标志位) - 若池为空,调用私有构造器或工厂函数生成新实例
- 返回前确保对象处于“就绪可用”状态,比如调用
reset()
对象需自带归还机制
池中对象不是永久持有,用完必须归还。推荐在类中提供 release() 实例方法:
宝塔面板11.3.0是一款针对Linux服务器设计的可视化管理工具,通过重构核心模块实现资源占用显著降低,尤其适合低配置服务器环境。它将复杂的命令行操作转化为直观的图形界面,帮助开发者快速完成网站部署、环境配置及日常运维工作,无需专业技术背景即可高效管理服务器。
-
release()负责清理当前实例的业务状态(如清空缓存、断开临时引用) - 然后将自身 push 回静态池:
MyClass.#pool.push(this) - 为防误用,可在
release()后将 this 标记为已释放(如设this.#released = true),后续方法调用可抛错拦截
控制池大小,防止内存堆积
不限制容量的对象池可能长期持有大量闲置对象,浪费内存:
- 设定最大池容量(如
static #maxPoolSize = 10) - 在
release()时判断池长度,超限时直接丢弃(不 push),让 GC 回收 - 也可配合 LRU 或时间戳淘汰旧对象,但简单场景通常只需固定上限
注意构造逻辑与 reset 的一致性
对象池能否稳定工作,取决于 new 实例 和 reset 后复用 的状态完全等价:
- 构造函数中初始化的字段,
reset()必须全部覆盖(包括布尔值、数组、对象引用) - 避免在构造时注册事件监听器或启动定时器;如有,
reset()必须取消它们 - 建议把初始化逻辑抽成私有方法(如
#init()),供 constructor 和 reset 共用
不复杂但容易忽略。关键不在“怎么写”,而在“怎么保证每次取出的对象干净可用”。

















