Flyweight享元模式仍然属于“对象性能”
模式。
1. 动机(Motivation)
在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价一一主要指内存需求方面的代价。
通常不用担心对象数量问题,但是存在倍乘效应的情况下就会占用很大的内存需求,常见的优化方法是共享技术,共享技术是面向对象里经常用来解决性能问题的手段,这也是Flyweight的核心思想。
如何在避免大量细粒度对象问题的同时,让外部客户程序仍然能够透明地使用面向对象的方式来进行操作?
2. 模式定义
运用共享技术
有效地支持大量
细粒度的对象。
–《设计模式》GoF
比如说字符串,字符串在系统中使用的量是非常大的,占用的内存也是比较大的,常见的系统包括stl等都用了一定的共享技术,java和C#会在编译器层面用一些共享技术。除了字符串,线程也是一类例子。
3. 结构( Structure)
GoF中面向对象的一种描述方法。从上面的类图可以看到FlyweightFactory的工厂,本来创建对象是一个个new,但是这种方式会