设计模式之 享元模式 Flyweight
别名:缓存
目的
享元模式是一种结构型设计模式,它通过在多个对象之间共享状态的公共部分,而不是将所有数据保存在每个对象中,从而让你能够在可用的内存中容纳更多的对象。
问题
为了在长时间工作后放松一下,你决定开发一款简单的视频游戏:玩家可以在地图上移动并互相射击。你选择实现一个逼真的粒子系统,并将其作为游戏的独特特色。大量的子弹、导弹和爆炸产生的弹片将在地图上飞舞,为玩家带来惊险的体验。
完成游戏后,你推送了最后一次提交,构建了游戏,并将其发送给朋友进行测试。尽管游戏在你的电脑上运行完美,但你的朋友无法长时间游玩。在他的电脑上,游戏在几分钟后就会崩溃。在花了几个小时查看调试日志后,你发现游戏崩溃是因为内存不足。原来,你朋友的电脑比你自己的电脑要弱得多,这就是为什么问题在他的机器上迅速出现的原因。
实际问题是与你的粒子系统相关的。每个粒子,如子弹、导弹或弹片,都是由一个包含大量数据的单独对象表示的。在某个时刻,当玩家屏幕上的混乱达到高潮时,新创建的粒子不再适合剩余的内存,因此程序崩溃了。
解决方案
仔细检查`Particle`类时,你可能会注意到`color`(颜色)和`sprite`(精灵图)字段比其他字段占用更多的内存。更糟糕的是,这两个字段在所有粒子中存储了几