一、概念
①、什么是享元模式?
运用共享技术有效地支持大量细粒度的对象。
②、什么是细粒度对象?享元模式的两个状态?
在分析什么是细粒度对象之前,我们现了解一下享元对象的两个状态:内部状态和外部状态。
在享元对象内部并且不用随环境改变而改变的共享部分,成为享元对象的内部状态,而随环境改变而改变的、不可以共享的状态就是外部状态。内部状态存储于ConcreteFlyweight对象之中,而外部对象则应该考虑由客户端对象存储或计算。当调用Flyweight对象的操作时,将该状态传递给它。
在实际使用中,能够共享的内部状态是有限的,因此享元对象一般都设计为较小的对象,它所包含的内部状态较少,这种对象也成为细粒度对象。
③、解决什么问题(出现的背景)?
面向对象技术可以很好的解决一写灵活性或扩展性问题,但在很多情况下需要在系统中增加类和对象的个数。当对象数量太多时,将导致运行代价过高,带来性能下降,内存溢出等问题。为了解决这一问题便诞生了享元模式。把其中具有相同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。
④、如何解决?
用唯一标识码(key)判断,如果内存中有,则返回这个唯一标识码所标识的对象。
⑤、何时使用?
系统有大量相似的对象;需要缓冲池的场景。
⑥、享元模式的核心是什么?
享元模式的核心在于享元工厂类,享元工厂类的作用在于提供一个用于存储享元对象的享元池,用户需要对象时,首先从享元池中获取,如果享元池不存在,则创建一个新的享元对象返回给用户,并在享元