## 享元模式 Flyweight Pattern 享元模式,以共享的方式高效地支持大量的细粒度的对象。通过复用内存中已存在的对象,降低系统创建对象实例的性能消耗。 ### ### 要点 - 享元模式中有两种状态。内蕴状态(Internal State)和外蕴状态(External State)。 - 内蕴状态,是不会随环境改变而改变的,是存储在享元对象内部的状态信息,因此内蕴状态是可以共享的。对任何一个享元对象而言,内蕴状态的值是完全相同的。 - 外蕴状态,是会随着环境的改变而改变的。因此是不可共享的状态,对于不同的享元对象而言,它的值可能是不同的。 - 享元模式通过共享内蕴状态,区分外蕴状态,有效隔离系统中的变化部分和不变部分。 ### ### 使用场合 在以下情况都成立时,适合使用享元模式: 1. 当系统中某个对象类型的实例较多的时候。 2. 由于使用了大量的对象,造成了很大的存储开销。 3. 对象的大多数状态都可变为外蕴状态。 4. 在系统设计中,对象实例进行分类后,发现真正有区别的分类很少的时候。 ### ### 引申与参考 - 为了返回一个已经创建的享元,需要和那些已经实例化的对象建立联系,我们可以配合对象池来进行操作。 - 当使用状态模式时,很多时候可以配合使用享元模式,在不同的状态机上使用相同的对象实例。 - 享元模式的Unity版本实现: - 本节内容相关的英文原文: - 本节内容相关的中文翻译: