在之前的篇章,我们已经完成了典型的23种设计模式的讲解 漫谈模式系列(第一版),本文给出23种设计模式之外的一种,即对象池模式。
对象池模式是一种常用的软件设计模式,其目的是通过限制对象的创建和销毁,以减少对象的创建和销毁开销,从而提高程序的性能和效率。
其实,在很多地方,“池化”的思想普遍存在,尤其是对一些资源的创建和销毁比较昂贵的场景,比如数据库连接池、Socket连接池、线程池等。接下来,我们就来简单说说对象池模式。
意图
对象池模式旨在通过限制对象的创建和销毁来提高程序的性能和效率。在该模式中,我们维护一个对象池,这个对象池中保存了多个对象,我们可以重复使用这些对象,而不是频繁地创建和销毁它们。
结构
对象池模式大致结构如下:
这里涉及到的参与者有如下几种:
AbstractObjectPool(抽象对象池)
抽象对象池是用于存储和管理对象的容器。包含:
ConcreteObjectPool(具体对象池)
实现抽象类的create方法,包含其它相关属性和方法。
当然,对象的创建,也可以通过Factory来创建。在AbstractObjectPool包含一个Factory的引用,在构造函数赋值即可。
接下来,我们就以SimpleDateFormat对池对象,简单完成对象池模式的示例。
示例一、不包含Factory
抽象对象池
具体对象池
实现基类的create()方法
为了方便,封装从池中获取对象,处理相关业务逻辑后,放回到池子中。
客户端
运行结果
示例二、包含Factory
抽象对象池
具体对象池
同样,为了方便,封装从池中获取对象,处理相关业务逻辑后,放回到池子中。
工厂接口和具体工厂
客户端
同样,运行一下结果,我们能发现运行正常。
至此,一个简单的以SimpleDateFormat为示例的对象池模式示例就完成了。
优缺点
优点
使用对象池模式有助于提高程序的性能和效率。
比如:对象池模式可以用于管理各种对象,例如线程池、数据库连接池、Socket连接池等。在这些应用场景中,对象的创建和销毁通常是非常昂贵的,使用对象池可以有效地减少这些开销。可以重复使用这些对象,而不是频繁地创建和销毁它们。
缺点
其它信息
本文给出的示例比较简单,并没有包含预初始化一定数量的池对象,或者池对象过期等处理。一般情况下,
写好一个对象池其实并不容易,需要考虑的事情还有很多很多,这里就不再具体展开。有兴趣的读者也可以去研读一下Apache common Pool2等源代码,可以了解更多的信息。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。