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