享元模式
简介
享元模式(Flyweight Pattern)摒弃了在每个对象中存储所有数据的方式,通过共享多个对象的相同状态,使开发者可以在有限的内存容量中载入更多数据。
享元模式将对象状态划分为两部分:
- 内在状态(Intrinsic State): 这部分状态是对象共享的,不随环境改变而改变,可以存储在享元对象内部。
- 外在状态(Extrinsic State): 这部分状态是对象独有的,随环境改变而改变,不能共享,通常由客户端在使用享元对象时传递。
通过将内在状态存储在少量共享的享元对象中,并将外在状态在需要时传递,可以避免创建大量重复的对象,从而有效节省内存。享元模式通常与工厂模式结合使用,由工厂负责管理和提供共享的享元对象。
角色组成
- 享元(Flyweight),一个接口,定义所有具体享元对象共享的操作方法
- 具体享元(ConcretFlyweight),实现享元接口的类,包含原始对象中部分能在多个对象中共享的状态。
- 享元工厂(FlyweightFactory),对已有享元对象的缓存池进行管理的类。客户端通过享元工厂创建具体享元对象,并向其传递目标具体享元对象的一些内部状态。享元工厂会根据参数在之前已创建的享元接口中进行查找,如果找到满足条件的具体享元对象,则将其返回;如果没找到,则根据参数新建具体享元对象。