定义
Use sharing to support large numbers of fine-grained objects efficiently.(使用共享对象可有效地支持大量的细粒度对象。)享元模式(Flyweight Pattern)是池技术的重要实现方式。
对象的内部状态和外部状态:
- 内部状态
内部状态是对象可共享出来的信息,存储在享元对象内部并且不会随环境改变而改变,它们可以作为一个对象的动态附加信息,不必直接存储在具体某个对象中,属于可以共享的部分。
- 外部状态
外部状态是对象得以依赖的一个标记,是随着环境改变而改变、不可共享的状态。是一批对象的唯一标识,是唯一的一个索引值。
享元模式的角色:
- Flyweight——抽象享元角色
- ConcreteFlyweight——具体享元角色
- unsharedConcreteFlyweight——不可共享的享元角色
- FlyweightFactory——享元工厂
享元模式的应用
享元模式的优缺点
享元模式是一个非常简单的模式,他可以大大减少应用程序创建的对象,降低程序内存的占用,增强程序的性能,但它同时也提高了系统复杂性,需要分离出外部状态和内部状态,而且外部状态具有固化特性,不应该随内部改变而改变,否则导致系统的逻辑混乱。
享元模式的使用场景
- 系统中存在大量的相似对象
- 细粒度的对象都具备较接近的外部状态,而且内部状态与环境无关,也就是说对象没有特定身份
- 需要缓冲池的场景