享元模式(Flyweight)
目的
通过共享多个对象所共有的相同状态,在有限的内容容量中载入更多对象。解决性能问题,是一种时间换空间的手段。
组成
- 客户端(Client)
负责计算或存储享元外在状态。
- 享元工厂(Flyweight Factory)
会对已有享元的缓存池进行管理,客户端通过调用工厂并向工厂传递目标享元的内在状态。工厂会根据参数在缓存池中查找,有满足条件的享元即返回;没有则根据参数新建享元。
- 情景(Context)
包含原始对象中各不相同的外在状态。(情景和享元组合即原始对象的全部状态)
- 享元(Flyweight)
包含原始对象中部分能在多个对象中共享的状态。享元中存储的状态被称为“内在状态”,传递给享元方法的状态被称为“外在状态”。
适用场景
- 需要生成大量相似对象
- 对象中包含可抽取且能在多个对象间共享的重复状态
应用场景
《JavaScript设计模式与开发实践》中提到两种场景