您的位置:首页 > 其它

如何实现一个对象池

2015-05-12 12:35 405 查看
前言

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

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

开工

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



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



池的构造函数



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

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



FIFO,LIFO的实现比较直观



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



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



我们有三种加载策略。





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




参考:

http://stackoverflow.com/questions/2510975/c-sharp-object-pooling-pattern-implementation
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: