黑马程序员技术交流社区

标题: 关于享元设计模式问题 [打印本页]

作者: 汪小照    时间: 2012-9-25 13:07
标题: 关于享元设计模式问题
本帖最后由 汪小照 于 2012-9-25 13:55 编辑

请问什么事享元设计模式呢?最好能说具体点,希望用代码来反映享元设计模式的这种思想?
有一家公司出现了这样的面试题
作者: 张小龙    时间: 2012-9-25 13:21
老师的视频里讲的是:在访问比较小的,常用的一些数,比如-128到127时
即使用Integer num1=3;    Integer num2=3;那么用==号比较num1和num2时,也是相等的
这是因为java中对这中经常使用,且范围较小的内容,单独放在一段内存中,以方便调用。
但是,如果是用的Integer num1=new Integer(3); Integer num2=new Integer(3);
则用==号则不相等,这个要注意。
作者: 冯培军    时间: 2012-9-25 13:33
    总结了一下张老师讲的享元模式:(flyweight) 有很多个小的对象,它们有很多属性相同,把它们变成一个对象,不同的属性变成方法的参数,称之为外部状态,相同的属性称之为内部状态。
    享元模式的使用前提:
    1,当我们发现某个类型的对象有大量的实例时,我们是否可以对这些实例进行分类,经过分类后,我们发现只有很少的类别的情况下。
    2,我们发现通过使用享元模式后能够提高系统的性能和不会带来更多的复杂度时。
    享元模式一般是给出本地内存资源节省的一个方案,并不适合互联网上的分布式应用的情况,不过享元模式对于排他性的要求资源的控制,是个不错的选择的。
举例:
public static void main(String[] args) {

        Integer iObj = 3;
        System.out.println(iObj + 12);
        
        String s1 = new String("abc");
        String s2 = new String("abc");        
        Integer i1 = 137;
        Integer i2 = 137;
        

        System.out.println(i1 == i2);
        
        Integer i3 = Integer.valueOf(213);
        Integer i4 = Integer.valueOf(213);
        System.out.println(i3==i4);
        
    }


作者: 汪小照    时间: 2012-9-25 13:50
嗯,哥们,谢了,我明白了。
作者: 汪小照    时间: 2012-9-25 13:50
嗯,哥们,谢了,我明白了。




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