黑马程序员技术交流社区

标题: 什么是享元设计模式 [打印本页]

作者: 闫博文    时间: 2012-8-10 16:08
标题: 什么是享元设计模式
什么是享元设计模式?
作者: 朱烈葵    时间: 2012-8-10 17:55
就是,有一堆东西,把相同的部分,把它作为一个对像,不同的部分作为该对象的外部属性作为参数传送,像字符池,就是用这个,我的理解是这样的
作者: 黑马-张化    时间: 2012-8-10 18:02
①面向对象可以很好的解决一些灵活性和可扩展性的问题、 但是很多情况下需要在系统中增加类和对象的个数、 当对象的个数太多时、将对象数量太多时、将异常运行代价过高、带来性能下降问题
②享元模式真是为了解决这一类问题而诞生的、享元模式通过共享技术实现相同或者相似对象的重用
作者: 戚题彪    时间: 2012-8-10 18:08
享元模式就是Flyweight模式。我认为很简单的理解方法就是想数学中的提取公因式,把相同的部分提取出来当做一个元素处理,再处理剩下的不同的元素。
Flyweight模式是一个提高程序效率和性能的模式,会大大加快程序的运行速度.应用场合很多:比如你要从一个数据库中读取一系列字符串,这些字符串中有许多是重复的,那么我们可以将这些字符串储存在Flyweight池(pool)中.
避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类)。
面向对象语言的原则就是一切都是对象,但是如果真正使用起来,有时对象数可能显得很庞大,比如,字处理软件,如果以每个文字都作为一个对象,几千个字,对象数就是几千,无疑耗费内存,那么我们还是要"求同存异",找出这些对象群的共同点,设计一个元类,封装可以被共享的类,另外,还有一些特性是取决于应用(context),是不可共享的.

作者: 郑正华    时间: 2012-8-10 18:19
本帖最后由 郑正华 于 2012-8-10 18:28 编辑

享元模式的特点就是复用我们内存中已存在的对象,降低系统创建对象实例的性能消耗,避免内存使用过大。
英文名叫:Flyweight Pattern,翻译成中文的话就看大家自己的理解了,我认为是已经达到了比轻量级还要更加细化的一个程度,有人说羽量级也不能完全的表达出享元模式的本来目的。如果为了使用享元模式而把事物变得复杂,那我想就不是它的设计初衷了。这种设计模式所面向的就是那种“元”级别的。可以理解成最小单位,就像人民币中的分,甚至可以理解成微分。
享元模式的定义为:采用一个共享来避免大量拥有相同内容对象的开销。这种开销中最常见、直观的就是内存的损耗。享元模式以共享的方式高效的支持大量的细粒度对象。
享元模式中区分了内蕴状态和外蕴状态。内蕴状态就是共性,外蕴状态就是个性了。
它的应用场景:
1、当我们发现某个类型的对象有大量的实例时,我们是否可以对这些实例进行分类,经过分类后,我们发现只有很少的类别的情况下。
2、我们发现通过使用享元模式后能够提高系统的性能和不会带来更多的复杂度时,就可以用了。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2