运用共享技术有效地支持大量细粒度的对象
一般情况下,对象是不可以共享的。然而,通过一个需要共享的对象创建一个职责,享元模式可以使多个客户端共享一个对象。在开发过程中我们经常会发现这种情况:在同一时刻,只有一个客户端需要引用某个对象,如果这个对象的状态发生变化,那么就必然是因为引用此对象的客户端使这个对象状态发生了改变,所以对象不需要将自身状态的改变通知其他客户端。但是我们也需要使多个客户端能够对一个对象进行共享的访问。
多个客户端需要共享一个对象的原因就是在某些情况下必须管理成千上万的小型对象。如果一个程序中包括了大量的细小的对象,那么就应该采取措施,使得客户端可以安全地共享这些细小的对象的公共部分。享元模式的目的就是使用共享的方式来有效地支持大批量的小粒度对象。
享元模式适用于一下几种情况:
- 一个程序使用了大量的对象时;
- 由于使用大量的对象造成比较大的内存和存储资源消耗时;
- 对象的很多状态都可以改变为外部状态时;
- 使用外部状态后可以用较少的共享对象取代大量对象时;
通过使用享元模式,我们可以对享元模式进行共享访问,这类对象往往会大量地出现。享元对象的最大特点就是不可改变,为了满足这一特点,我们可以提取出共享对象中不可被改变的那一部分。为了保证能对享元模式对象进行共享,可以在开发过程中提供一个享元工厂,客户端可以使用这个工厂来查找所需要的享元对象。