最常见的单例模式应用:日志和数据库连接!
/**
* 单例模式之饿汉模式(特点:一开始就创建)
*/
public class Singleton1 {
/**
* 私有化构造方法,防止外部调用创建对象
*/
private Singleton1() {
}
/** 类加载时就创建 */
private static final Singleton1 singleObj = new Singleton1();
/**
* 给外围提供统一获取对象入口
*
* @return
*/
public static Singleton1 getIntance() {
return singleObj;
}
}
/**
* 单例模式之懒汉模式(特点:要用到的时候才创建)
* 特殊点:当多线程的场合,一开始会创建多个对象,所以此场景下懒汉模式不适用
*/
public class Singleton2 {
/**
* 私有化构造方法,防止外部调用创建对象
*/
private Singleton2() {
}
/** 初始化对象为空,当需要的时候再创建 */
private static final Singleton2 singleObj = null;
/**
* 给外围提供统一获取对象入口
*
* @return
*/
public static Singleton2 getIntance() {
// 当对象为空的时候就创建
if (singleObj == null) {
return new Singleton2();
}
// 否则就直接返回
return singleObj;
}
}
饿汉模式和懒汉模式的区别在于实例创建的时机,饿汉模式是在该类加载时即被创建,而懒汉模式则是在需要获取时才进行创建。
但是:懒汉模式只在单线程中适用,当在多线程时,都进行if判断时,就会产生多个该类的实例,就不符合单例模式的原则,也不符合程序的需要。
所以根据实际情况而使用相应的模式!