单例,一个类仅有一个实例。该类负责创建自己的对象,同时确保只有一个对象被创建。并提供一个访问它的全局访问点
特点
- 私有化构造函数
- 自己创建当前类对象
- 对外提供公共的方法(获取已经创建好的对象)
简单来说使用单例模式可以带来下面几个好处:
- 对于频繁使用的对象,可以省略创建对象所花费的时间,这对于那些重量级对象而言,是非常可观的一笔系统开销;
- 由于 new 操作的次数减少,因而对系统内存的使用频率也会降低,这将减轻 GC 压力,缩短 GC 停顿时间。
一、懒汉模式
线程不安全,延迟初始化,严格意义上不是不是单例模式
public class Singleton {
private Singleton (){} // 1.构造方法私有化,外部不能new
private static Singleton instance; //2.本类内部创建对象实例
public static Singleton getInstance() { //3.提供一个公有的静态方法,返回实例对象
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
二、饿汉模式
线程安全,比较常用,但容易产生垃圾&