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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周一川 中级黑马   /  2013-4-14 20:49  /  1290 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

刚刚看了张孝翔的视屏装箱有个算法叫享元模式,能不能给我详细的解释一下

5 个回复

倒序浏览
享元模式是对象的结构模式,它以共享的方式高效地支持大量的细粒度对象。
  享元对象能做到共享的关键是区分内蕴状态和外蕴状态。
  一个内蕴状态是存储在享元对象内部的,并且是不会随环境改变而改变的,因此一个享元可以具有内蕴状态并可以共享。
  一个外蕴状态是随环境改变而改变的、不可以共享的状态。享元对象的外蕴状态必须由由端保存,并在享元对象被创建之后,在需要使用的时候再传入到享元对象内部。
  外蕴状态不可以影响享元对象的内蕴状态。换句话说,它们是相互独立的。
回复 使用道具 举报
享元模式以共享的方式高效的支持大量的细粒度对象。是一种结构模式,处理类和对象之间的组合,避免了大量的有相同内容的小类,使大家共享一个类。例如在word中输入26个英文字母时,如果每一个字母都去创建一个对象实例的话,那么内存实例也是非常大了。那就要占用多少内存呢。所以只要创建26个就好了。不同的只是字母的位置不同而已。因而没有必要每一个对象都去创建实例,只要通过复用对象的形式,来组织一些可能有多个字符重复的内容。
回复 使用道具 举报
当很多个小的对象他们具有较多相同的属性的时候,那么就把他们变成一个对象。
把其中不同的属性变成方法的参数,称之为外部状态。那些相同的属性称之为这个对象的内部状态。
这就是享元模式。Flyweight Pattern

                Integer i1 = 13;// 自动装箱
                Integer i2 = 13;
                Integer i3 = 137;
                Integer i4 = 137;

                System.out.println(i1 == i2);// 显示结果为true.
                System.out.println(i3 == i4);// 显示结果为false。
                // 当数字在-128到127之间的时候对对应的Integer对象是同一对象。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
  享元模式的定义为:采用一个共享来避免大量拥有相同内容对象的开销。这种开销中最常见、直观的就是内存的损耗。享元模式以共享的方式高效的支持大量的细粒度对象。

Flyweight模式的有效性很大程度上取决于如何使用它以及在何处使用它,当以下情况都成立时使用Flyweight模式。
        一个应用程序使用了大量的对象,
        完全有余使用了大量的对象,造成了很大的存储开销。
        对象的大多数状态都可以变为外部状态。
        如果删除对象的外部状态那么可以用相对较少的共享对象取代很多组对象。
        
Flyweight对象可以被共享,对于概念上明显有别的对象,标识测试将返回真值。
....老师的原话:
有很多很小的对象,它们有很多相同的东西(属性),把它们定义为同一个对象。那些不同的东西(属性),把它们作为方法的参数,称为外部状态。那些相同的属性称为内部状态。
回复 使用道具 举报
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马