使用目的
运用共享技术有效地支持大量细粒度的对象。
使用场景
- 一个应用程序使用了大量对象并且由于使用大量对象造成了很大的内存开销的情况
- 对象的大多数都可以变为外部状态
- 如果删除对象的外部状态,可以由少量的共享对象取代很多组对象
- 应用程序不依赖于对象标识。
使用实例
在Java这个语言中,我们使用的Integer这个对象就是对这个有很好的一个体现。
我们看一下下面的代码:
Integer number1 = 127;
Integer number2 = 127;
Integer number3 = 128;
Integer number4 = 128;
System.out.println(number1 == number2); //true
System.out.println(number3 == number4); //false
为什么会出现这样的问题呢?因为在Java里面的Integer是使用了享元模式,在-128-127之间的值相同的元素都指向同一个内存单元。也就是让这些内存单元共享给多个元素。