![465d9d60764b7a4732491d9c6245a541.png](https://i-blog.csdnimg.cn/blog_migrate/6a77b6d78ba2c72f0a2ad1d7e68e1d47.jpeg)
概述
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,使用单例模式的类只有一个对象实例。
单例应用场景
- Windows系统的任务管理器。
- Windows系统的回收站。
- 操作系统的文件系统,一个操作系统只能有一个文件系统。
- 数据库连接池的设计与实现。
- 多线程的线程池设计与实现。
- Spring中创建的Bean实例默认都是单例。
- Java-Web中,一个Servlet类只有一个实例。
- 等等...
单例的实现要点
单例模式要求类能够有返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法)。
单例的实现主要是通过以下三个步骤:
- 将类的构造方法定义为私有方法。这样其他类的代码就无法通过调用该类的构造方法来实例化该类的对象,只能通过该类提供的静态方法来得到该类的唯一实例。
- 定义一个私有的类的静态实例。
- 提供一个公有的获取实例的静态方法。
单例追求的目标
- 线程安全。
- 懒加载。
- 调用效率高。
单例模式的常用写法
常用的单例有以下5种写法,如果还有其他的写法,也基本是从以下5种稍微修改而来,由于内容基本一致,并且可能不是很常用,因此在本文中不再赘述。
1.饿汉模式
![a7b782e32809630cd9b7e90ea05afa56.png](https://i-blog.csdnimg.cn/blog_migrate/eb8645a9997c6c588d06d570032238bf.jpeg)
饿汉模式,比较常见的一种写法。在类加载的时候就对实例进行初始化,没有线程安全问题;获取实例的静态方法没有使用同步,调用效率高;但是没有使用懒加载,如果该实例从始至终都没被使用过,则会造成内存浪费。
总结:线程安全、非懒加载、效率高。
是否推荐:可以使用,但不推荐。