重学设计模式 - Object Pool模式

1、意图

在创建对象比较昂贵,或者对于特定类型能够创建的对象数目有限制时,管理对象的重用。

2、问题

对象的创建和/或管理必须遵循一组定义明确的规则集。通常这些规则都与如何创建对象、能够创建多少个对象和在已有对象完成当前任务时如何重用它们等等相关。

3、通用结构

4、解决方案

在需要一个Reusable对象时,Client调用ReusablePool的AcquireReusable方法。如果池是空的,那么AcquireReusable方法创建一个Reusable对象(如果能够),否则,就等待知道有Reusable对象返回集合。

5、参与者与协作

ReusablePool管理着Client所用的Reusable对象的可用性。Client然后在一个有限的时间段内使用Reusable对象的实例,ReusablePool包含所有Reusable对象,这样就可以对其以统一的方式进行管理。

6、效果

最适用于对对象的需求一直非常稳定的时候,需求变化太大会带来性能问题。ObjectPool中为了解决这一问题,限制了能够创建的对象数量。使管理实例创建的逻辑与实例被管理的类分离,可以得到内聚更好的设计。

7、实现

如果可以创建的对象数量有限制,或者池的大小有限制,可以使用一个简单的数组来实现池。否则,使用vector对象,负责管理对象池的对象必须是唯一能够创建这些对象的对象。ReusablePool是使用Singleton模式实现的。另一种变体是在Reusable对象中加一个释放方法---让它自己返回到池。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值