前言
- 单例模式并不是无脑应用在项目中,只有当需要对公共资源或者资源池做操作时,才会需要用到。
- 只要在逻辑上保证实例的唯一性,那么他就是单例模式,并不需要局限为static静态方法,getInstance去调用。当然在实际使用中还是尽量规范化。
类加载/懒汉式单例模式
懒汉式单例模式在类使用时才会被调用,故而会有线程安全问题。
通常使用双重检查锁定解决。
public class SingletonClass {
// 声明全局的静态私有实例对象
private static SingletonClass singletonClass = null;
/**
* 私有化构造方法,使其无法通过new SingletonClass()获取实例对象
*/
private SingletonClass(){}
/**
* 提供一个方法获取实例,名称通常是getInstance
* 为了线程安全,通常使用双重检查锁定
* @return
*/
public static SingletonClass getInstance(){
if(singletonClass == null){
synchronized (SingletonClass.class){
if(singletonClass == null){
singletonClass = new SingletonClass();
}
}
}
return singletonClass;
}
}
项目加载/饿汉式单例模式
饿汉式单例模式在项目加载时就会创建一个唯一实例
public class SingletonProject {
// 声明全局的私有静态实例对象
private static final SingletonProject singletonClass = new SingletonProject();
/**
* 私有化构造方法,使其无法通过new SingletonClass()获取实例对象
*/
private SingletonProject(){}
/**
* 提供一个方法获取实例,名称通常是getInstance
* @return
*/
public static SingletonProject getInstance(){
return singletonClass;
}
}
两种类型使用场景
两种场景无明显差距,实际项目中可以随意使用。