1.单例模式简介
- 概念
- 单例意思是只包含一个对象被称为单例的特殊类
- 通过单例模式可以保证系统中,应用该模式的类只有一个对象实例
- 使用场景
- 业务系统全局只需要一个对象实例,比如发号器、redis连接对象等
- Spring IOC容器中的bean默认就是单例
- springboot中的controller、service、dao层中通过@Autowired的依赖注入对象默认都是单例的
- 分类
- 懒汉:就是所谓的懒加载,延迟创建对象
- 饿汉:与懒汉相反,容器启动创建对象
- 实现步骤
- 私有化构造函数
- 提供获取单例的静态方法
2.懒汉式单例模式代码
java
public class Singleton {
private static volatile Singleton singleton;
private Singleton() {
}
public static Singleton getSingleton() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
3.饿汉式单例模式
-
饿汉方式:提前创建好对象
-
优点:实现简单,没有多线程同步问题
-
缺点:不管是否使用,instance对象一直占用内存
-
如何选择
- 如果对象不大,且创建不复杂,直接使用饿汉方式即可
- 其它情况则采用懒汉实现方式
-
代码实现
javapublic class Singleton { private static Singleton singleton = new Singleton(); private Singleton() { } public static Singleton getSingleton() { return singleton; } }