本帖最后由 柳雷 于 2012-7-27 20:06 编辑
这是我技术日志的内容,上面说的很清楚:
一、介绍
享元模式是在软件设计中应用较多的模式之一。它适用于多个事物具有较多的共性,如果每个事物都创建一个对象,势必造成内存的浪费,为了节省内存空间,就有人想到一种设计方式,让多个事物共享他们共有的东西,而不同的东西使用外部数据结构,当需要时再把他们传递给享元。
享元模式在编辑器系统中大量使用。一个文本编辑器往往会提供很多种字体,而通常的做法就是将每一个字母做成一个享元对象。享元对象的内蕴状态就是这个字母,而字母在文本中的位置和字模风格等其他信息则是外蕴状态。比如,字母a可能出现在文本的很多地方,虽然这些字母a的位置和字模风格不同,但是所有这些地方使用的都是同一个字母对象。这样一来,字母对象就可以在整个系统中共享。
二、总结享元模式优点就在于它能够大幅度的降低内存中对象的数量;而为了做到这一步也带来了它的缺点:它使得系统逻辑复杂化,而且在一定程度上外蕴状态影响了系统的速度。 所以一定要切记使用享元模式的条件: 1)系统中有大量的对象,他们使系统的效率降低。 2)这些对象的状态可以分离出所需要的内外两部分。 外蕴状态和内蕴状态的划分以及两者关系的对应也是非常值得重视的。只有将内外划分妥当才能使内蕴状态发挥它应有的作用;如果划分失误,在最糟糕的情况下系统中的对象是一个也不会减少的!两者的对应关系的维护和查找也是要花费一定的空间(当然这个比起不使用共享对象要小得多)和时间的,可以说享元模式就是使用时间来换取空间的。
|