如何实现一个对象池

前言

在某次被面试的时候被问到这个问题,当时觉得有点无从下手,并不是说感觉这个问题有多少的难度,只是缺少一些思考的方向。正好在stackoverflow也有类似的人问,就做一回搬运工。

一般创建池总是有比较明确的目标,这里我们称之为资源。比如说线程池,连接池中的线程和连接就是资源。在明确资源的情况下,可以更好的优化和设计对象池。这里我们创建一个比较通用的对象池。

开工

首先,定义好我们的资源类

然后,我们设想好我们希望的调用方式

池的构造函数

 

使用委托的方式将资源的构造方式传递给Pool

 

先看AccessMode,这里分为三种:FIFOLIFOcircular buffer。采用接口抽象这三种访问方式。

 

FIFOLIFO实现比较直观

 

循环缓冲的方式比较复杂,但是这里不是我们关注的重点。

 

当然,我们还可以有其他更多的访问方式。通过简单的工厂方法来创建不同的访问方式。

我们有三种加载策略。

最后,我们使用Semaphore保证创建的资源数目不超过上限。

参考:

http://stackoverflow.com/questions/2510975/c-sharp-object-pooling-pattern-implementation

转载于:https://www.cnblogs.com/bnbqian/p/4496985.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值