内部状态包括棋子的颜色,外部状态包括棋子在棋盘上的位置。最终,我们省去了多个实例对象存储棋子颜色的空间,从而达到了空间的节约。
优点
享元模式可以避免大量非常相似对象的开销。在程序设计时,有时需要生成大量细粒度的类实例来表示数据。如果能发现这些实例数据除了几个参数外基本都是相同的,使用享元模式就可以大幅度地减少对象的数量。
使用场合
Flyweight模式的有效性很大程度上取决于如何使用它以及在何处使用它。当以下条件满足时,我们就可以使用享元模式了。
- 一个应用程序使用了大量的对象;
- 完全由于使用大量的对象,造成很大的存储开销;
- 对象的大多数状态都可变为外部状态;
- 如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象。
扩展
总结
使用享元模式可以避免大量相似对象的开销,减小了空间消耗;而空间的消耗是由以下几个因素决定的:
- 实例对象减少的数目;
- 对象内部状态的数目;对象内部状态越多,消耗的空间也会越少;
- 外部状态是计算的还是存储的;由于外部状态可能需要存储,如果外部状态存储起来,那么空间的节省就不会太多。
同时,在实现的时候,一定要控制好外部状态与共享对象的对应关系,比如我在代码实现部分,在CCheseboard类中使用了一个map进行彼此之间的映射,这个映射在实际开发中需要考虑的。
好了,享元模式就总结到这里了。希望大家和我分享你对设计模式的理解。我坚信:分享使我们更进步。
本文版权归果冻说所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
PS:至于腾讯那帮伙计到底是如何实现QQ游戏大厅的,我也不知道,这里也完全是猜测的,请不要以此为基准。
如果这篇文章对你有帮助,你可以请我喝杯咖啡。
本文链接:http://www.jellythink.com/archives/295
订阅本站:http://www.jellythink.com/feed 转载请注明来源:果冻说