Java中的单例设计模式有很多,这边我们介绍懒汉式和饿汉式这两种。
单例设计模式有一下特点:
1、单例类只能有一个实例
2、单例类必须自己创建自己的唯一实例
3、单例类必须给所有其他对象提供这一实例
单例模式有三要素:
1、构造方法私有化
2、静态属性指向实例
3、public static的getlnstance方法,返回第二步的静态属性
使用场景:
1、单例模式保证了系统内存中该类只存在一个对象,节省了系统资源,对于一些需
要频繁创建销毁的对象,使用单例模式可以提高系统性能。
2、当想实例化一个单例类的时候,必须要记住使用相应的获取对象的方法,而不是使
用new。
3、需要频繁的进行创建和销毁的对象、创建对象时耗时过多或耗费资源过多(即:重量级对象),但又经常用到的对象、工具类对象、频繁访问数据库或文件的对象(比如数据源、session工厂等)。
代码例子:
public class Test04 {
//饿汉式单例类,在类初始化时,已经自行实例化
private Test04(){}
private static final Test04 single = new Test04();
//静态方法工厂
public static Test04 getInstance(){
return single;
}
}
public class Test05 {
//懒汉式单例类,在第一次调用的时候实例化自己
private Test05(){}
private static Test05 single=null;
//静态工厂方法
public static Test05 getInstance(){
if(single==null){
single = new Test05();
}
return single;
}
}
/**
* 懒汉式 饿汉式
* 效率 低 高 懒汉式每次都需要进行判断,而饿汉式不需要判断,相比较而言懒汉式效率低饿汉式效率高
* 内存 少 多 因为饿汉式在类加载的时候就会直接创建对象,所以就会直接占用内存而此时不一定使用该对象,
* 而懒汉式只会在需要使用的时候才会创建对象,占用内存,所以说懒汉式占用内存少,饿汉式早
*/