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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小小太阳 中级黑马   /  2013-5-27 12:15  /  1470 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

基本数据类型自动拆箱和装箱中提到享元设计模式,有点不理解,希望大家能帮帮忙看一下

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

5 个回复

倒序浏览
沙发 为什么我没有听说过 来学习下 {:soso_e182:}
回复 使用道具 举报
享元,从字面上看享就是共享,元就是细粒度对象(可理解为占用空间小的对象,如Byte类型对象)。总的说来就是将这些小对象放在一共享池中,比如你进行了一下操作:
Integer  i1= 55    ;
Integer  i2= 55    ; 。非享元时就是建立了2个不同的对象i1和i2,在享元时,就是i1和i2指向了55这个整数型对象,这个55的对象是放在共享池中的。JDK1.5后将 -128-127之间的数值 会存在 一个 缓存池中,下次使用的时候 先从缓存池中 取出 这个数据 ,而不会去分配它的内存。还比如word中 我们输入 多个   aaaaa那么 如果为每个a分配一个 内存空间 那么 内存的浪费 很严重 ,这时享元模式就可以只建立一个a对象,然后对a进行5次调用即可,不需要建立5个a对象。
  
享元对象的优点:减少对象数量,节省内存空间。
享元模式的缺点:维护共享对象,需要额外的开销(用一个线程来维护垃圾回收)。
享元模式的本质:分离与共享。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
一些物件被重复的大量使用是很占内存的,享元模式就是当内存有的,你就直接用不用在创建对象了。

按张孝祥老师讲的总结就是,有很多相似小东西,被大量的使用,那么就把这些东西中相同的部分封装在内部。
把不同的部分封装在外部当参数传进来。

当时是死记硬背下来的,这个内部外部实在搞不懂。现在貌似清楚点了我就说说我的理解:
比如说你写文章,是不是用到了很多汉字,而汉字的颜色什么的可能用不同,我们拿字母来举例:

比如说有一个字符类方法,他有一个方法用来接收你输入的字母,你输入的是什么他就是什么,
然后里面还有一个方法是设置颜色的,而这时你输入了一个红色的A和蓝色的B,都创建对象明显是浪费内存
那既然A和B都有一个接收对象的方法,那就不如把这个方法设成共享的,这个方法在内存中就只有一份,哪个
用到了就直接拿去用就行了,不必创建个对象就在内存中整一份,这也就是把相同的封装起来了,
然后还有不同的部分呢,不同的部分就封装成函数,你是什么颜色把你的颜色当成参数传进来就行了。

再简单点就是比如说A字体的大小是10号颜色是红,B的也是十号颜色是蓝,那就把这个相同的部分---“十号”封
装城内部状态,而不同的部分---“颜色”可以写成个设置颜色的方法,然后把你的颜色传进来就好了。之后这个
字符类就可以共享出去了。

好吧,写的很乱举的例子可能也不太恰当,你看下吧,写的和我想的有一定的差距,只能意会不能言传是一件很
痛苦的事啊、、{:soso_e135:}

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
w270307032 发表于 2013-5-27 13:02
享元,从字面上看享就是共享,元就是细粒度对象(可理解为占用空间小的对象,如Byte类型对象)。总的说来就 ...

厉害哥们
回复 使用道具 举报
李阳阳 发表于 2013-5-27 14:12
一些物件被重复的大量使用是很占内存的,享元模式就是当内存有的,你就直接用不用在创建对象了。

按张孝祥 ...

这么全啊 ;P
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马