Object Pool模式
使用Singleton模式构建对象池管理Manager,初始化N个对象,当需要使用时遍历N个对象,得到空闲对象,不使用时释放该对象。
Object Pool模式 | 关键特征 |
---|---|
意图 | 在创建对象比较昂贵,或者对于特定类型能够创建的对象数目有限时,管理对象的重用。 |
问题 | 对象的创建和管理必须遵循一组定义明确的规则集。通常这些规则都与如何创建对象、能够创建多少个对象和已有对象完成当前任务时如何重用它们等等有关 。 |
解决方案 | 在需要一个Reusable对象时,Client调用ReusablePool的acquireReusable方法。如果池是空的,那么acquireReusable方法创建一个Reusable对象,否则,就等待直到有Reusable对象返回集合 |
参与者与协作者 | ReusablePool管理着Client所有的Reusable对象的可用性。Client然后在一个有限的时间段内使用Reusable对象的实例,ReusablePool包含所有Reusable对象,这样就可以对其以统一的方式进行管理。 |
效果 | 最适用于对象需求一直非常稳定的时候,需求变化太大会带来性能问题。Object Pool中为了解决这一问题,限制了能够创建的对象的数量。使管理示例创建的逻辑和实例被管理的类分离,可以得到内聚更好的设计。 |
实现 | 如果可以创建的对象数量有限制,或者池的大小有限制,可以使用一个简单的数组来实现池。否则使用Vector对象,负责管理对象池的对象必须是能够唯一创建这些对象的对象。ReusablePool是用Singleton模式实现的。另一种变体是在Reusable对象中加一个释放方法——让它自己回到池中 |
参看《设计模式解析》第二版