运用共享技术有效地支持大量(几万几十万)细粒度的对象。比如string、线程池,虽然实现方式可能和享元模式有区别,但是思想是一样的。
享元模式的结构图:
比如创建字体对象,假设一篇文章有几万字,但其实只有3种字体,我们不需要为每一个字都创建一个字体对象,让相同字体的字共享一个字体。但是字体对象创建出来就是只读的,因为有多个地方引用了这个对象,一改则全改。
享元模式在创建对象时,不直接调用对象的构造器创建,而是传递一个key值给享元工厂,假设这个key值是对象名,工厂中有一个键值对链表。通过key可以查询相应的对象。如果这个对象存在,则返回这个对象,如果不存在,则创建这个对象,并将该对象添加进链表。
参考:https://www.cnblogs.com/adamjwh/p/9070107.html
https://www.bilibili.com/video/av24176315/?p=13