定义:确保某一个类只有一个实例,并且自行实例化并向整个系统提供这个实例java
Singleton类称为单例类,经过使用private的构造函数确保了在一个应用中只产生一个实例,而且是自行实例化的数据库
因为单例模式在内存中只有一个实例,减小了内存开支,特别是一个对象频繁的建立、销毁时,而且建立或销毁时性能没法优化,单例模式的优点就很是明显了安全
单例模式通常没有接口,扩展很困难。另外单例模式与单一职责原则有冲突,一个类应该只实现一个逻辑,而不关心它是不是单例的并发
1.要求生成惟一序列号的环境函数
2.在项目中须要一个共享访问点或共享数据时,如一个Web页面上的计数器,能够不用把每次刷新都记录到数据库中,使用单例模式保持计数器的值,并确保是线程安全的高并发
3.建立一个对象须要消耗过多资源,如要访问IO和数据库等资源性能
4.须要定义大量的静态常量和静态方法的环境,能够采用单例模式优化
1.注意单例模式的线程安全的问题,尤为是在高并发的状况下线程
2.要考虑对象的复制状况。在java中对象默认是不能够被复制的,若实现了Cloneable接口,并实现了clone方法,则是能够经过对象复制方式建立一个新对象,对象复制是不须要调用类的构造函数,所以即便是私有的构造函数,对象仍然能够被复制对象
在Spring中,每一个Bean默认都是单例的,这样的优势是Spring容器能够管理Bean的生命周期,决定何时建立,何时销毁,销毁的时候须要作什么处理等等