设计模式之对象池模式
對(duì)象池模式
對(duì)象池模式, 或者稱為對(duì)象池服務(wù), 其意圖為: 通過(guò)循環(huán)使用對(duì)象, 減少資源在初始化和釋放時(shí)的昂貴損耗(這里的"昂貴"可能是時(shí)間效益(如性能), 也可能是空間效益(如并行處理), 在大多情況下, 指性能)
簡(jiǎn)單的說(shuō), 在需要時(shí),從池中提取,不用時(shí),放回池中,等待下一個(gè)請(qǐng)求. 典型的例子是連接池和線程池.
類圖如下:
?
其中角色如下:
對(duì)象池實(shí)例代碼:
?
這是一個(gè)簡(jiǎn)單的對(duì)象池實(shí)現(xiàn),在實(shí)際應(yīng)用中還需要考慮池的最小值、最大值、池化對(duì)象狀態(tài)(若有,重點(diǎn)考慮)、異常處理(如滿池情況)等方面,特別是池化對(duì)象狀態(tài),若是有狀態(tài)的業(yè)務(wù)對(duì)象則需要重點(diǎn)關(guān)注.
把對(duì)象池化的本意是期望一次性初始化所有對(duì)象,減少對(duì)象在初始化上的昂貴性能開(kāi)銷,從而提高系統(tǒng)整體性能. 然而池化處理本身也要付出代價(jià), 因此,并非任何情況下都適合采用對(duì)象池化.
通常情況下, 在重復(fù)生成對(duì)象的操作成為影響性能的關(guān)鍵時(shí),才適合進(jìn)行對(duì)象池化.但是若池化所能帶來(lái)的性能提高并不顯著或重要的話,建議放棄對(duì)象池化技術(shù),以保持代碼的簡(jiǎn)明,轉(zhuǎn)而使用更好的硬件來(lái)提高性能為佳.
對(duì)象池技術(shù)在Java領(lǐng)域已經(jīng)非常成熟, 只要做過(guò)企業(yè)級(jí)開(kāi)發(fā)的人員,基本都用過(guò) C3P0、DBCP、Proxool等連接池, 這是對(duì)象池模式的典型應(yīng)用. 在實(shí)際開(kāi)發(fā)中若需要對(duì)象池, 建議使用 common-pool 工具包來(lái)實(shí)現(xiàn), 簡(jiǎn)單、快捷、高效.
總結(jié)
以上是生活随笔為你收集整理的设计模式之对象池模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: oracle如何写循环日期自增_Orac
- 下一篇: java set循环取值_java循环遍