《游戏编程模式》笔记——对象池模式
意图
放弃单独地分配和释放内存,从固定的池子中重用对象,提高性能和内存使用率。
模式
定义一个池对象,包含一组可重用对象,初始化时创建整个对象集合。需要新对象时就向池子申请一个,使用完后回到池子中。
何时使用
需要频繁创建和销毁对象。
对象大小相仿。
在堆上进行对象内存分配十分缓慢或者会导致内存碎片。
每个对象都封装了像数据库或者网络连接这样昂贵又重要的资源。
设计决策
对象和池耦合吗?
如果对象与池耦合:
实现简单。
保证对象只能被对象池创建。
如果对象没有和池耦合:
最大的好处是可以保存多种类型的对象,可实现通用的、可重用的对象池类型。
谁负责初始化重用对象?
如果在对象池的内部重新初始化:
对象池可以完全封装管理对象。
可能需要提供用来初始化不同情况下的初始化函数。
如果外部代码初始化对象:
对象池的接口更简单,只需要提供返回新对象的引用。
外部代码需要处理无法创建新对象的失败,需要保证代码安全。
参考
《游戏编程模式》