概念
Flyweight Pattern:运用共享技术复用大量细粒度的对象,降低程序内存的占用,提高程序的性能。
享元模式提醒我们讲一个对象的属性划分为内部和外部状态
内部状态:可以被对象集合共享,通常不会改变
外部状态:根据应用场景经常改变
享元模式是利用时间换取空间的优化模式
使用
以下用Es6实现一个“通用对象池”类-ObjectPool
,这个类管理一个装载空闲对象的数组,如果外部需要一个对象,直接从对象池中获取,而不是通过new
操作;模拟File
类,“文件下载”操作。
对于File
类,内部状态是pool
属性和download
方法;外部状态是name
和src
。借助对象池,实现了File
类的复用
1 | // 对象池 |
优点
- 减少内存中对象的数量,使相同对象或相似对象在内存中只保存一份,降低系统的使用内存,提高性能
- 可以使外部状态相对独立,而且不会影响其内部状态,从而使享元对象可以在不同的环境中被共享
缺点
- 需要分离出内部状态和外部状态,使程序的逻辑复杂化
- 对象在缓冲池中的复用需要考虑线程问题