A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 欧德林 中级黑马   /  2012-4-27 09:32  /  2317 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如何理解享元模式?
享元模式是提高对象的利用性?
那么什么时候用这个享元模式呢?

9 个回复

倒序浏览
享元模式,运行共享技术有效地支持大量细粒度的对象,避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类)。
享元模式可以避免大量非常相似类的开销。
那么如果在JavaScript中应用享元模式呢。有两种方式,第一种是应用在数据层上,主要是应用在内存里大量相似的对象上;第二种是应用在DOM层上,享元可以用在中央事件管理器上用来避免给父容器里的每个子元素都附加事件句柄。

回复 使用道具 举报
我是这样理解的,就是先弄一个能装2两饭的碗,只要是2两饭以下的饭量就都能用这个碗来装,如果需要吃4两饭,就再生成一个装4两饭的碗。
因为预先有2两饭的碗了,所以只需要一个这样的对象来装饭,不用每种饭量都匹配一个碗。
关于是什么时候使用,可变数组就是个很好的例子。可以参考。
回复 使用道具 举报
享元模式的定义为:采用一个共享来避免大量拥有相同内容对象的开销。这种开销中最常见、直观的就是内存的损耗。享元模式以共享的方式高效的支持大量的细粒度对象。

享元模式的关键是共享,将事物的共性共享的同时,又保留其个性的部分
回复 使用道具 举报
享元模式(flyweight):例如window模式里面要显示很多图标,是每一个都弄一个图标,还是他们共同使用一个图标?他们很多东西都一样,就把他们弄成一个对象,就一个图标,只是显示的时候有显示的图标和显示的位置。这种模式就是享元模式
回复 使用道具 举报
如何理解享元模式?
享元模式(flyweight):可以这样理解,有很多个小的对象,他们有很多相同的属性,把他们变成一个对象,那些不同的属性,把它们变成方法的参数,那些相同的属性提取到对象的内部。

享元模式是提高对象的利用性?
提高了对象的重复利用性,节省内存空间。
那么什么时候用这个享元模式呢?
这里有一个很好的例子你参考一下。
例如:Integer num1 = 12;  Integer num2 = 12; System.out.println(num1 == num2);  返回true;
          Integer num1 = 128;  Integer num2 = 128; System.out.println(num1 == num2);  返回false;
原因是:对于基本类型的整数,要装箱成Integer对象的时候,如果这个数字在一个字节之内,也就是-128到127之间的数,一旦别包装成Integer对象后,就会把它缓存到一个池里面,下次又要把一个整数装成Integer对象的时候,就会先到缓冲池里面去找,如果有就直接使用。这样就节省了内存空间。这就是享元模式的一个应用。
回复 使用道具 举报
我是这么理解的,享元模式就好比是,一套数字系统【0和1】,你可以基于这套系统,组合出任意的一串又特殊意义 的数字串。如:100101011000111,而这套系统的最基本的显示元素是:0和1.
回复 使用道具 举报
金超 中级黑马 2012-4-28 01:07:00
8#
享元模式是对象的结构模式。享元模式以共享的方式高效地支持大量的细粒度对象。其能做到共享的关键是区分内部状态(Internal State)和外部状态(External)。内部状态是存储在对象内部的,并且不会随环境改变而有所不同的,因此,一个享元可以具有内部状态并可以共享。外部状态时随环境改变而改变的,不可以共享的状态。享元对象的外部状态必须由客户端保存,并在享元对象被创建之后,在需要使用的时候再传入到享元对象内部。外部状态不影响享元对象的内部状态。换句话说,它们是互相独立的。

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
亚男 中级黑马 2012-4-28 01:35:16
9#
享元模式是提高内存的利用率,主要是把一些常用且需经常重复的的小对象放在一起,,象往word写单词,字母是就二六个,可组合就多了,如果写个单词就创个对象就太浪费拉,所以我们把二十六个字母分成二十六个小对象放在一起,用的时候在重新组合就好,

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
享元模式适用性:1,一个系统有大量的对象;2,这些对象耗费大量的内存;3,这些对象的状态中大部分都可以外部化的;4,这些对象可以按照内蕴状态分成很多的组,当把外蕴对象从对象中剔除时,每一个组都可以仅用一个对象代替;5,软件系统不依赖于这些对象的身份,换言之,这些对象可以是不可分辨的。

在以上的需求中,将这种对象,相同的特点封装为属性,不同的特点以参数的形式出入。使得对象创建成功

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马