- 单例模式优点:
- 由于单例模式只生成一个实例,减少了系统性能开销,当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方式来解决。
- 单例模式可以在系统设置全局的访问点,优化环共享资源访问,例如可以设计一个单例类,负责所有数据表的映射处理。
- 常见的五种单例模式实现方式:
- 饿汉式(线程安全,调用效率高,不能延时加载)
//饿汉式单例模式
public class SingletonDemo1 {
private static SingletonDemo1 instance = new SingletonDemo1(); // 类初始化时,立即加载这个对象
private SingletonDemo1(){
}
// 不需要同步,类初始化的时候立即加载了对象,保证唯一,线程安全,不需要同步,效率高
public static SingletonDemo1 getInstance() {
return instance;
}
}
`
* 懒汉式(线程安全,调用效率不高。可以延时加载)
//懒汉式单例模式
public class SingletonDemo2 {
private static SingletonDemo2 instance; // 类初始化时,不初始化这个对象(延时加载,真正用的时候再创建)
private SingletonDemo2(){
}
// 方法同步,调用效率低
public static synchronized SingletonDemo2 getInstance() {
if (instance==null){
instance = new SingletonDemo2();
}
return instance;
}
}
`
* 双重检测
* 静态内部类(线程安全,调用效率高,可以延时加载)
//静态内部类单例模式
public class SingletonDemo3 {
private static class SingletonClassInstance{
private static final SingletonDemo3 instance = new SingletonDemo3();
}
private SingletonDemo3(){
}
public static SingletonDemo3 getInstance(){
return SingletonClassInstance.instance;
}
}
`
* 枚举单例(线程安全,调用效率高,不能延时加载)