知识卡片
延迟初始化用缓存换取创建成本
内容
延迟初始化是[[工厂方法模式的定义与命令简化原理]]的扩展:工厂内部维护类型到实例的Map 缓存,命中直接返回,未命中才创建并存入缓存。可扩展成限制最大实例数(如JDBC连接池),也 适用于初始化成本高的对象。发散:延迟初始化和[[有上限的多例模式]]解决同一类问题,区别是 多例池启动时预建,延迟初始化按需创建、用后留存,更灵活。
参考来源
- 位置:《设计模式之禅(第2版)》第8章《工厂方法模式》(源文件:_epub-src/text/part0036.html)
- 结论依据:原文给出ProductFactory用Map缓存已创建产品对象、命中直接返回未命中才创建的实现,并说明该框架可扩展为限制最大实例数量(举例JDBC连接池的MaxConnections),也适用于硬件访问等创建复杂的对象场景。
- 原始内容:何为延迟初始化(Lazy initialization)?一个对象被消费完毕后,并不立刻释放,工厂类保持其初始状态,等待再次被使用……可以通过判断Map中已有的对象数量来实现,这样的处理是非常有意义的,例如JDBC连接数据库,都会要求设置一个MaxConnections最大连接数量。