单例模式保证了某个对象只有一个实例,单例可以节省开销,同时能够避免多个实例引起的多线程问题。
单例分为饿汉模式和懒汉模式。
饿汉模式
- 将类的构造器私有化,防止外部实例化对象
- 在类内部自身实例化一个对象,唯一且私有
- 提供一个公共静态的获取实例方法,用来获取这个唯一的实例
public class Single{
private Single(){
}
private static Single single = new Single();
public static Single getInstance(){
return single;
}
}
懒汉模式
- 将类的构造器私有化
- 声明(仅声明)一个唯一的实例,且静态私有
- 提供一个公共静态的获取实例的方法,首先判断这个唯一实例是否为空,为空则实例化并返回;不为空直接返回
public class Single{
private Single(){
}
private static Single single;
public static Single getInstance(){
if(single==null){
single=new Single();
}
return single;
}
}
比较:
懒汉模式只有在调用获取对象时才会实例化对象,加载块,运行慢;
饿汉模式加载类时实例化对象,加载慢,运行快;