享元模式(Flyweight)

意图

运用共享技术有效地支持大量细粒度的对象。

动机

Flyweight模式描述了如何共享对象,使得可以细粒度地使用它们而无需高昂的代价。

flyweight是一个共享对象,它可以同时在多个场景(context)中使用,并且在每个场景中flyweight都可以作为一个独立的对象—这一点与非共享对象的实例没有区别。

flyweight不能对它所运行的场景做出任何假设,这里的关键概念是内部状态和外部状态之间的区别。

适用性

Flyweight 模式的有效性很大程度上取决于如何使用它以及在何处使用它。

当以下情况都成立时使用 Flyweight 模式:

参与者

实现

在实现Flyweight模式时,注意以下几点:

示例一:通用源代码

1565857047589