单例模式 Singleton ,保证一个类仅有一个实例,并提供一个访问它的全局访问点
饿汉式单例在单例类被加载时候,就实例化一个对象并交给自己的引用;
而懒汉式单例只有在真正使用的时候才会实例化一个对象并交给自己的引用
/*
*饿汉式单例
*我们知道,类加载的方式是按需加载,且加载一次。因此,在上述单例类被加载时,
*就会实例化一个对象并交给自己的引用,供系统使用;而且,由于这个类在整个
*生命周期中只会被加载一次,因此只会创建一个实例,即能够充分保证单例
*/
public class Singleton1 {
private static Singleton1 singleton1 = new Singleton1();//创建自己的静态对象
private Singleton1(){
private构造方法,堵死了外界利用new创建此类实例的可能
}
// 以自己实例为返回值的静态的公有方法
public static Singleton1 getSingleton1(){
return singleton1;
}
}
/*
*懒汉式单例单例实例被延迟加载,即只有在真正使用的时候才会实例化
*一个对象并交给自己的引用
*/
public class Singleton2 {
private static Singleton2 singleton2;
private Singleton2(){
}
// 以自己实例为返回值的静态的公有方法,静态工厂方法
public synchronized static Singleton2 getSingleton2(){
// 被动创建,在真正需要使用时才去创建
if (singleton2 == null) {
singleton2 = new Singleton2();
}
return singleton2;
}
}
从速度和反应时间角度来讲,饿汉式(又称立即加载)要好一些;从资源利用效率上说,懒汉式(又称延迟加载)要好一些。