定义
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
为什么要用单例模式
在我们的系统中,有一些对象其实我们只需要一个,比如说:线程池、缓存、对话框、注册表、日志对象、充当打印机、显卡等设备驱动程序的对象。事实上,这一类对象只能有一个实例,如果制造出多个实例就可能会导致一些问题的产生,比如:程序的行为异常、资源使用过量、或者不一致性的结果。
对于频繁使用的对象,可以省略创建对象所花费的时间,由于 new 操作的次数减少,因而对系统内存的使用频率也会降低,这将减轻 GC 压力,缩短 GC 停顿时间。
单例的模式的实现
- 饿汉方式,指全局的单例实例在类装载时构建
public class SingletonHungary {
private SingletonHungary(){};
private static SingletonHungary instance = new SingletonHungary();
public SingletonHungary getInstance() {
return instance;
}
}
- 懒汉方式,指全局的单例实例在第一次被使用时构建
public class Singleton {
private Singleton(){};
private Singleton instance;
public Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class){
if (instance == null){
instance = new Singleton();
}
}
}
return instance;
}
}