三私一公
私有的静态变量(保存类的实例)
当函数执行完毕后,静态变量不会消失
静态变量只会被初始化一次
私有的构造函数(防止类外实例化)
私有的克隆函数(防止通过克隆生成对象)
公共的静态方法(通常命名为getInstance),返回唯一实例的一个引用(调取这个类相当于一个接口)
解决的是如何在整个项目中创建唯一对象实例的问题
确保一个类最多只有一个实例,并提供一个全局访问点
它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用
因为每次打开和关闭数据库都是对数据库的一种极大考验和浪费
优点:
避免过多的new操作消耗大量的资源,解决内存开销
可以通过一个类来全局控制某些配置信息
同样也可以美观代码
分两种类型:饿汉式和懒汉式
饿汉式:在类加载时已经创建好该单例对象,等待被程序使用
懒汉式:在真正需要使用对象时才去创建该单例类对象
懒汉式如何保证只创建一个对象
Double Check(双重校验) + Lock(加锁)
如果没有实例化对象则加锁创建,如果已经实例化了,则不需要加锁,直接获取实例
饿汉式和懒汉式的选用
在开发中如果对内存要求不高,使用饿汉式写法,因为简单不易出错,且没有任何并发安全和性能问题
如果对内存要求非常高,那么使用懒汉式写法,可以在特定时候才创建该对象