单例模式
单例模式又叫做Singleton模式,指的是一个类,在一个JVM里,只有一个实例存在。
单例模式有以下特点:
1.单例类只能有一个实例。
2.单例类必须自己给自己的唯一实例。
3.单例类必须给所有其他对象提供这一实例。
饿汉式单例模式
饿汉式单例类在类初始化时,已经自己实例化
public class Chen{
//私有的默认构造方法
private Chen(){
}
//已经自己实例化
private static final Chen cnr = new Chen();
//静态工厂方法
public static Chen getInstance(){
return cnr;
}
}
懒汉式单例类
懒汉式单例类,在第一次调用的时候实例化
public class Chen{
//私有化构造方法使得该类无法在外部通过new 进行实例化
private Chen(){}
//准备一个类属性,用于指向一个实例化对象,但是暂时指向null
private static Chen cnr;
//静态工厂方法 返回实例对象
public static Chen getInstance(){
//第一次访问的时候,发现cnr没有指向任何对象,这时实例化一个对象
if(null == cnr){
cnr = new Chen;
}
//返回 cnr指向的对象
return cnr;
}
}
什么时候使用饿汉式,什么时候使用懒汉式
饿汉式是立即加载的方式,无论是否会用到这个对象,都会加载
如果在构造方法里写了性能消耗较大,占时较久的代码,比如建立于数据库连接,那么就会在启动的时候感觉稍微有些卡顿。
懒汉式是延迟加载的方式,只有使用的时候才会加载。并且有线程安全的考量,使用懒汉式,在启动的时候,会感觉到比饿汉式略快,因为并没有做对象的实例化。
看业务要求,如果业务上允许有比较充分的启动和初始化时间,就用饿汉式,否则就使用懒汉式
单例模式三元素
1.构造方法私有化
2.静态属性指向实例
3.public static 的getInstance方法,返回第二步的静态属性