首先说明一下:这个例子是来源于【C#线程参考手册】参考手册内的一个例子,在这个我只是想研究一下她的设计原理。
具体好用不好用,因为没有做具体项目的测试,所以提醒大家注意。
1 设计思路:
1.1 在程序的全局利用单例模式建立一个数据库连接池对象。
1.2 获得数据库连接方法BorrowDBConnection()。
这个方法的作用如下:
如果【待清理的池】内DB连接对象不是关闭状态,则添加到【DB连接池】,继续使用。
如果【待清理的池】内DB连接对象是关闭状态,则DB连接被移除【待清理的池】,之后被关闭。
如果【待清理的池】不存在DB连接对象,则创建DB连接对象后,附加到【DB连接池】内,然后使用她。
1.3 返回数据库连接给【待清理的池】,方法是ReturnObjectToPool()。
【DB连接池】删除DB连接对象。
【待清理的池】追加DB连接对象。
1.4 延迟DB连接对象的垃圾回收事件
通过Timer的Elapsed事件,来实现【待清理的池】内的DB连接对象的关闭处理。
2 UML图例:
这里要说明的是,为什么要继承ObjectPool类呢?
因为ObjectPool类的结构对于所有使用池、可手动释放资源的对象是通用的。
3 具体代码如下:
3.1 ObjectPool类(真的很通用的一个类,设计的很好,感觉可以继承她做任何事)
3.2 DBConnectionSingleton类 - 数据库连接池(实现了ObjectPool类的Create,Validate,Expire方法,并使用了单例模式)
3.3 Main函数