前言
在某次被面试的时候被问到这个问题,当时觉得有点无从下手,并不是说感觉这个问题有多少的难度,只是缺少一些思考的方向。正好在stackoverflow也有类似的人问,就做一回搬运工。
一般创建池总是有比较明确的目标,这里我们称之为资源。比如说线程池,连接池中的线程和连接就是资源。在明确资源的情况下,可以更好的优化和设计对象池。这里我们创建一个比较通用的对象池。
开工
首先,定义好我们的资源类
然后,我们设想好我们希望的调用方式
池的构造函数
使用委托的方式将资源的构造方式传递给Pool
先看AccessMode,这里分为三种:FIFO,LIFO,circular buffer。采用接口抽象这三种访问方式。
FIFO,LIFO的实现比较直观
循环缓冲的方式比较复杂,但是这里不是我们关注的重点。
当然,我们还可以有其他更多的访问方式。通过简单的工厂方法来创建不同的访问方式。
我们有三种加载策略。
最后,我们使用Semaphore保证创建的资源数目不超过上限。
参考:
http://stackoverflow.com/questions/2510975/c-sharp-object-pooling-pattern-implementation