享元模式:运用共享技术有效的支持大量细粒度的对象。
享元模式 Flyweight
享元模式:将对象划分为内部状态和外部状态,共享内部状态,通过共享池来减少对象的一种模式。
内部状态/外部状态
- 内部状态
享元对象内部不会随环境改变而改变的共享部分,称为享元对象的内部状态。也就是说,内部状态是不变的部分。 - 外部状态
受环境影响改变,不可共享的部分,称为享元对象的外部状态。也就是说,外部状态是变化的。
比如一堆衣服中有男女两个款式,如果需要请模特过来拍照展示,其中性别是无法改变的部分,即内部状态;而衣服款式是多变不一样的,所以款式是外部状态。在这个例子中,通过创建共享池共享性别对象。
类图结构
结构解析
Flyweight
抽象类,享元类,表示可以共享的抽象类。ConcreteFlyweight
实现类,具体共享类。UnsharedConcreteFlyweight
实现类,具有共享能力,但是不强制该类共享。FlyweightFactory
享元工厂,创建并管理享元对象,通过共享池保存。
示例
1 | // 1. Flyweight |
总结
享元模式主要使用了缓存来减少创建重复对象,能大大降低内存占用率。
参考文档
- 大话设计模式
Android
源码设计模式解析与实战