享元模式
问题引入
在面向对象程序设计过程中,有时会面临要创建大量相同或相似对象实例的问题。创建那么
多的对象将会耗费很多的系统资源,它是系统性能提升的一个瓶颈。这些对象有很多相似的
地方,如果能把它们相同的部分抽取出来共享,那将大量节省系统资源,这就是享元模式产
生的背景。
享元,即共享对象。享元模式尝试重用现有的同类对象,如果未找到匹配的对象则创建新的
对象。
说到享元模式,第一个想到的应该就是池技术了,String 常量池、数据库连接池、缓冲池等
等都是享元模式的应用,所以说享元模式是池技术的重要实现方式。
比如我们每次创建字符串对象时,都需要创建一个新的字符串对象的话,内存开销会很大,
所以如果第一次创建了字符串对象“adam“,下次再创建相同的字符串”adam“时,只是把它
的引用指向”adam“,这样就实现了”adam“字符串再内存中的共享。
实例
定义
利用共享技术,有效地支持大量细粒度对象的复用。通过共享已经存在的对象来大幅减少需
要创建的对象数量,避免创建大量相似类带来的开销,从而提高系统资源利用率。
优点
享元模式的优点:
1) 大大减少同类对象的创建,减少系统中对象的数量,降低对象创建带来的系统开销以及
内存压力。
缺点
享元模式的缺点:
1) 系统复杂度提高,维护难度提高。(为了使对象可以共享,需要将一些不能共享的状态
外部化,从而造成系统复杂度提高)
2) 读取外部状态会使得运行时间稍微变长。
评论0