定义
享元模式,以共享的方式高效地支持大量的细粒度的对象。
通过复用内存中已存在的对象,降低系统创建对象实例的性能消耗。
享元模式中有两种状态。
内蕴状态(Internal State)和外蕴状态(External State)
- 内蕴状态,是不会随环境改变而改变的,是存储在享元对象内部的状态信息,因此内蕴状态是可以共享的。对任何一个享元对象而言,内蕴状态的值是完全相同的。
- 外蕴状态,是会随着环境的改变而改变的。因此是不可共享的状态,对于不同的享元对象而言,它的值可能是不同的。
- 享元模式通过共享内蕴状态,区分外蕴状态,有效隔离系统中的变化部分和不变部分。
使用场合
在以下情况都成立时,适合使用享元模式:
- 当系统中某个对象类型的实例较多的时候。
- 由于使用了大量的对象,造成了很大的存储开销。
- 对象的大多数状态都可变为外蕴状态。
- 在系统设计中,对象实例进行分类后,发现真正有区别的分类很少的时候。
如在SLG地图中,存在很多土地格子,其实大多数土地格子都是一样的只是位置不一样,
那么我们可以给不同的土地分配ID,每个ID都对应一种土地类型,这样就不用每个格子都保存一份土地数据