享元模式

享元模式

定义

享元(flyweight)模式是一种用于性能优化的模式,“fly”在这里是苍蝇的意思,意为蝇量级,享元模式的核心是运用共享技术来有效支持大量细粒度的对象
如果系统中因为创建了大量类似的对象而导致内存占用过高,享元模式就非常有用了,在 JS 中,特别是移动端浏览器分配的内存并不算多,如何节省内存就成了一件非常重要的事

内部状态与外部状态

享元模式要求将对象的属性划分为内部状态与外部状态,享元模式的目标是尽量减少共享对象的数量

  1. 内部状态存储于对象的内部
  2. 内部状态可以被一些对象共享
  3. 内部状态独立于具体的场景,通常不会改变
  4. 外部状态取决于具体的场景,并根据场景而变化,外部状态不能被共享

这样一来2,可以把所有内部状态相同的对象指定为同一个共享对象,而外部的状态可以从对象身上剥离出来,并储存在外部
剥离了外部状态的对象成为共享对象,外部状态在必要时被传入共享对象来组装成一个完整的对象,虽然组装外部状态成为一个完整对象的过程需要花费一定的时间,但却可以大大减少系统中的对象数量,相比之下,这点时间或许是微不足道的,因此,享元模式是一种用时间换空间的优化模式

适用性

享元模式带来的好处很大程度上取决于如何使用以及何时使用,一般来说,以下情况发生时可以使用:

  1. 一个程序中使用了大量的相似对象
  2. 由于使用了大量对象,造成很大的内存开销
  3. 对象的大多数状态都可以变为外部状态
  4. 剥离出对象的外部状态之后,可便用相对较少的共享对象取代大量对象

小结

享元模式是为解决性能问题而生的模式,这跟大部分模式的诞生原因不一样,在一个存在大量相似对象的系统中,享元模式可以很好地解决大量对象带来的性能问题


享元模式
http://blog.climbed.online/2023/11/24/Web -- Knowledge is infinite/编程思想/设计模式/享元模式/
作者
Z.K.
发布于
2023年11月24日
许可协议