我们对比一下懒汉模式和饿汉模式的优缺点:
懒汉模式,它的特点是运行时获得对象的速度比较慢,但加载类的时候比较快。它在整个应用的生命周期只有一部分时间在占用资源。
饿汉模式,它的特点是加载类的时候比较慢,但运行时获得对象的速度比较快。它从加载到应用结束会一直占用资源。
这两种模式对于初始化较快,占用资源少的轻量级对象来说,没有多大的性能差异,选择懒汉式还是饿汉式都没有问题。但是对于初始化慢,占用资源多的重量级对象来说,就会有比较明显的差别了。所以,对重量级对象应用饿汉模式,类加载时速度慢,但运行时速度快;懒汉模式则与之相反,类加载时速度快,但运行时第一次获得对象的速度慢。
从用户体验的角度来说,我们应该首选饿汉模式。我们愿意等待某个程序花较长的时间初始化,却不喜欢在程序运行时等待太久,给人一种反应迟钝的感觉,所以对于有重量级对象参与的单例模式,我们推荐使用饿汉模式。作者: zbgl 时间: 2013-11-17 22:01
thanks ,你在项目中,有没有写过有关于单例模式的模块?作者: 风逝 时间: 2013-11-17 22:03
单例模式有一下特点:
1、单例类只能有一个实例。
2、单例类必须自己自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例,用static修饰。
//饿汉式单例类.在类加载是已经初始化
public class A {
//私有的默认构造子
private A {}
private static final A a = new A();
//提供接口
public static A getA() {
return a;
}
}
//懒汉式单例类,第一次实例化,以后就不用实例化
public class A {
//私有的默认构造子
private A() {}
//注意,这里没有final
private static A a=null;
//静态工厂方法
public synchronized static A getA() {
if (a== null) {
a = new A();
}
return a;
}
}