1. 模式结构
2. 角色
(1) Flyweight(抽象享元类)
规定享元类的公共方法,比如提供享元的內部状态,设置享元的外部状态
(2) ConcreteFlyweight(具体享元类)
intrinsicState内部状态:成员变量,不随环境改变而改变,可以共享
extrinsicState外部状态:局部变量,随环境改变而改变,不可以共享
模式中可以有多个具体享元类
(3) UnsharedConcreteFlyweight(非共享具体享元类)
可以省略
不被共享,可以直接通过实例化构建
搭配组合模式时可以作为具体享元类的容器构件
(4) FlyweightFactory(享元工厂类)
模式关键点在于工厂选择性返回享元
聚合一个享元池(可用键值对集合实现)
获取享元,当不存在时创建享元,当存在时返回享元
3. 单纯享元模式
省略非共享享元类
4. 复合享元模式
联用组合模式,非共享享元类作为共享享元类的容器构件
5. 与其他模式联用
用简单工厂模式来生成享元对象
享元工厂类可以使用单例模式进行设计
享元模式结合组合模式形成复合享元模式
6. 特点
极大减少内存中的对象,相同对象或相似对象只保留一份
7. 应用
JDK中的String类