跳到主要内容

享元模式

享元模式(Flyweight Pattern): 运用共享技术复用大量细粒度的对象,降低程序内存的占用,提高程序的性能。

举例

例如 UITableViewCell 的缓存机制,大道降低内存消耗的目的。举例,音乐服务根据收费划分出免费用户和会员用户,免费用户只能听部分免费音乐,会员可以听全部的音乐,并且可以下载。虽然二者权限上有所区别,但是他们所享受的音乐是来自同一个音乐库,这样所有的音乐都只需要保存一份就可以了。另外,如果出现音乐库里没有的音乐时,则需要新增该音乐,然后其他服务也可以享受新增的音乐,相当于享元池或者缓存池的功能。

享元模式保证共享内部状态如音乐库,而外部状态根据不同需求定制各种访问权限,使用中不能去改变内部状态,以达到共享的目的。

优点

使用享元模式可以减少内存中对象的数量,使得相同对象或相似对象在内存中只保存一份,降低系统的使用内存,也可以提升性能。 享元模式的外部状态相对独立,而且不会影响其内部状态,从而使得享元对象可以在不同的环境中被共享。

缺点

使用享元模式需要分离出内部状态和外部状态,这使得程序的逻辑复杂化。 对象在缓冲池中的复用需要考虑线程问题。