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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑雅杰 中级黑马   /  2012-12-15 19:54  /  1947 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

单例设计模式有两种方式有懒汉式和饿汉式。两者的区别就是实例化的顺序不同。都能实现单例设计的功能。开发中用饿汉式,那懒汉式既然又不安全又麻烦。万事万物都有其存在的必要于意义。那懒汉式存在的意义与价值在哪里啊,请教一下各位。谢谢

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

8 个回复

倒序浏览
饿汉式在加载类时就会创建那个静态对象,就会占据一定内存......
懒汉式就不会了吧!~你只有在第一次使用getInstance()方法才会new出对象...

呵呵,还是在面试之后彻底忘了懒汉式吧...
回复 使用道具 举报
我是这样理解的:
1,懒汉式:调用一次getInstance()就相当于执一次new,并返回实例。
return new Singleton();
如果你很懒,你只是突然想用(吃包子),让它新做一个实例(包子)。
2.饿汉式:这个实例一直都在那里,拿来就可以用了。
public Singleton getInstance(){return singletion;}
如果你很饿,你一要时时准备这个实例(包子),因为我随时可能要用到(吃包子)。
总结:
明显的,做一次包子花的时间比较拿包子的时间长。
这个可能和性能有关系,才决定你要用哪一种。
人人很饿,如果人人都跟老板讲,我要new一个新的。效率就不好了。

评分

参与人数 1技术分 +1 收起 理由
邵天强 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
两者应该都可以解决问题,但是懒汉式,存在安全问题(需要同步),懒汉式会在面试的时候考到。
回复 使用道具 举报
黑马黄涛 发表于 2012-12-15 20:14
饿汉式在加载类时就会创建那个静态对象,就会占据一定内存......
懒汉式就不会了吧!~你只有在第一次使用getI ...

呵呵  谢谢回答  
回复 使用道具 举报
esirong 发表于 2012-12-15 20:37
我是这样理解的:
1,懒汉式:调用一次getInstance()就相当于执一次new,并返回实例。
return new Singlet ...

明白了 谢谢你的回答哦  你还蛮有趣的
回复 使用道具 举报
答案就像以上同学解答的那样,我就不再赘述了。
单例模式中的饿汉式是开发中使用的,
至于懒汉式的唯一好处就是使用时才创建一个实例,不占用堆区空间。
但是由于懒汉式的这个特性所以会出现安全问题,所以会在面试的时候面试官问你这个问题 即考察了单例的设计模式又考察了多线程安全问题,所以是面试的重点问题!
回复 使用道具 举报
乔叶旭 发表于 2012-12-15 20:50
两者应该都可以解决问题,但是懒汉式,存在安全问题(需要同步),懒汉式会在面试的时候考到。 ...

谢谢你的回答
回复 使用道具 举报
张辉2012 发表于 2012-12-15 21:48
答案就像以上同学解答的那样,我就不再赘述了。
单例模式中的饿汉式是开发中使用的,
至于懒汉式的唯一好处 ...

谢谢你的回答  明白了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马