1.基本概念
单例模式,就是在整个应用中某个对象实例有且仅有一个。
2.应用场景
有些对象我们只需要一个,比如:配置文件、工具类、线程池、缓存、日志对象等。如果创造出多个实例,就会导致许多问题,比如占用过多资源,不一致的结果等。
3.代码实现
- 方式一:饿汉模式
public class Singleton {
// 1.将构造方法私有化,不允许外部直接创建对象
private Singleton(){
}
// 2.创建类的唯一实例(static属于类所有,只要类加载,此对象就加载了)
private static Singleton instance = new Singleton();
// 3.提欧共一个用于获取实例的方法
public static Singleton getInstance(){
return instance;
}
}
- 方式二:懒汉模式
public class Singleton2 {
// 1.将构造方法私有化,不允许外部直接创建对象
private Singleton2(){
}
// 2.声明类的唯一实例
private static Singleton2 instance2;
// 3.提供一个用于获取实例的方法
public static Singleton2 getInstance2(){
if(instance2 == null){
instance2 = new Singleton2();
}
return instance2;
}
}
两种方式对比:
两种方式下获取类的唯一对象的方式都是直接使用类调用方法getInstance()或者getInstance2()方法即可。
(1)饿汉模式:特点是加载类时比较慢,但由于在类加载时,静态对象就已初始化,所以在运行时获取对象的速度较快,且是线程安全的。
(2)懒汉模式:特点是加载类时比较快,但由于在类加载时,对象并未初始化,所以在运行时获取对象的速度较慢,且是线程不安全的。