《游戲編程模式》筆記——對(duì)象池模式
意圖
放棄單獨(dú)地分配和釋放內(nèi)存,從固定的池子中重用對(duì)象,提高性能和內(nèi)存使用率。
模式
定義一個(gè)池對(duì)象,包含一組可重用對(duì)象,初始化時(shí)創(chuàng)建整個(gè)對(duì)象集合。需要新對(duì)象時(shí)就向池子申請(qǐng)一個(gè),使用完后回到池子中。
何時(shí)使用
需要頻繁創(chuàng)建和銷毀對(duì)象。
對(duì)象大小相仿。
在堆上進(jìn)行對(duì)象內(nèi)存分配十分緩慢或者會(huì)導(dǎo)致內(nèi)存碎片。
每個(gè)對(duì)象都封裝了像數(shù)據(jù)庫(kù)或者網(wǎng)絡(luò)連接這樣昂貴又重要的資源。
設(shè)計(jì)決策
對(duì)象和池耦合嗎?
如果對(duì)象與池耦合:
實(shí)現(xiàn)簡(jiǎn)單。
保證對(duì)象只能被對(duì)象池創(chuàng)建。
如果對(duì)象沒有和池耦合:
最大的好處是可以保存多種類型的對(duì)象,可實(shí)現(xiàn)通用的、可重用的對(duì)象池類型。
誰(shuí)負(fù)責(zé)初始化重用對(duì)象?
如果在對(duì)象池的內(nèi)部重新初始化:
對(duì)象池可以完全封裝管理對(duì)象。
可能需要提供用來初始化不同情況下的初始化函數(shù)。
如果外部代碼初始化對(duì)象:
對(duì)象池的接口更簡(jiǎn)單,只需要提供返回新對(duì)象的引用。
外部代碼需要處理無(wú)法創(chuàng)建新對(duì)象的失敗,需要保證代碼安全。
參考
《游戲編程模式》
標(biāo)簽: