- 享元模式的意思就是:找一个地方,放入元数据。当使用到元数据时,就来这里找,这就是共享元数据的思想。
- 首先,元数据,一般来讲就是配置的意思。这些元数据一般使用Map存储。
- 享元模式的例子就是JVM的堆内存了,里面存储着Class对象,每个Class都是一个单例,当我们new对象的时候,JVM就会根据这个基于Class“元数据”为我们创建一个实例。各个实例之间也就共享了这个“元数据”。
可以理解为单例模式的一种扩展,维护一个工厂,工厂里面放Map,value是对象实例。且是单例。
应用案例
对于那些不常被修改的,但是要经常被查询,且直接从数据库中查比较耗时的数据,可以使用享元模式的思想,利用缓存,保证要查询的数据在内存中仅有一份。一提到缓存,我们可能就会想到
Redis,但是Redis毕竟是一个较重的组件,对于数据量小的场景,直接用JDK给我们提供的Map就好了。在JVM内部维护一个内存ConcurrentHashMap,查询的时候直接从缓存中取就行。- 当然,如果数据量大到微博热搜那种级别,肯定要上Redis的,因为这就需要一种分布式缓存组件来支撑如此庞大的读写请求了。
- 权限系统就比较适合JVM中设置缓存的场景。因为对于权限的查询往往需要查询一整棵权限树,这种递归查询比较耗时,但权限总共就那么几种,数据量不是很大。所以如果每次查的时候,先去
ConcurrentHashMap缓存查,如果缓存中没有,再去数据库中查,查出来后将权限树放在缓存中,下次就直接从缓存中拿就好了。
