先看定义:运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。
初步理解为为减少创建对象开销,共享已存在对象,什么叫共享已存在的对象,这概念够抽象的,通过阅读csdn里面很多作者给的例子,嗯,说实话,大部分也挺裹得,这让我更糊涂了。嗯,功夫不负有心人,终于找到一个认为写的很清晰、贴切的例子了。
直接上代码
#include
#include
简单说一下代码,熟悉的虚基类,对应子类,重点是工厂类DeviceFactory,里面有个map容器map > devices;看下调用,享元对象都是通过工厂类接口创建,5个享元对象,实际只创建两个map容器里的对象就完成了。看到这里就明白了,享元模式是这么一回事。
关键点是对象池,享元对象都通过工厂类接口创建,所有对象都在对象池中,如果有同类型对象创建时,直接取对象池对象使用,不用额外重新创建了,这样就达到了复用、减少空间消耗的目的了。相对应的也会增加创建时从对象池里取对象的消耗,应该取什么对象,对象池创建的数据形式,这都需要对数据形式有一个很高的认知理解。