黑马程序员技术交流社区

标题: 单例设计模式疑问? [打印本页]

作者: 冯盼    时间: 2012-12-1 11:37
标题: 单例设计模式疑问?
本帖最后由 yunhaitian 于 2012-12-1 13:24 编辑

单例设计模式一般建议使用饿汉式,但是饿汉式是在加载类时候就将对象加载进了内存,而且是静态的,这样它的生命周期与调用它的类一样。可是如果不是使用单例,那么实例化的对象生命周期和调用它的对象一样,调用它的对象生命周期结束,该对象也就消失并释放内存资源了。相比较而言,好像不使用单例设计模式要更节省内存,可是往往却都提倡使用单例设计模式?此处一直很是疑惑?
作者: ljhheima    时间: 2012-12-1 13:00
单例设计模式只是为了该类只产生一个对象,不让外界产生其他对象。
饿汉式比懒汉式好是因为如果多个线程引用该唯一对象会产生安全问题,解决安全问题需要更多的资源。饿汉式效率更高。
类的字节码文件也是一个对象,当对象不再使用是将会被回收。
什么时候对象回收并不确定。
作者: 刘腾    时间: 2012-12-1 13:11
使用单例设计模式是为了解决一个类在内存中只存在一个对象,想要保证对象的唯一性。
之所以建议使用饿汉式,首先分析下两种模式

懒汉模式:只有在自己需要对象的时候才会判断是否已有对象,如果没有就创建一个对象,然后返回,如果已有对象,立即返回。 所以懒汉式运行时获得对象的速度比较慢,但是类的加载比较快
饿汉式:在类加载的时候立即创建对象。 所以饿汉式运行时加载类的速度比较慢,但是获取对象的速度比较快

从用户体验的角度来说,我们应该首选饿汉模式。我们愿意等待某个程序花较长的时间初始化,却不喜欢在程序运行时等待太久,给人一种反应迟钝的感觉,所以对于有重量级对象参与的单例模式, 我们推荐使用饿汉模式 。





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