先来说说什么是单例模式
单例就是程序运行过程中,自始至终这个对象只有一个。
标准来讲,也就是单例模式的三要素:
单例就是(1)构造方法私有化,(2)将一个静态属性指向实例,(3)然后通过一个静态方法返回指向实例的静态属性。
单例模式分为饿汉式和懒汉式
通俗来说,饿汉式就是一个人饥肠辘辘的饿汉刚进饭店就波不急待的要了份饭吃。
package yang.instance;
public class Singleton {
private Singleton(){
}
private static Singleton singleton=new Singleton();
public static Singleton getInstance(){
return singleton;
}
}
懒汉就是饭店老板很懒惰,你不说点菜老板是不会主动给你提供菜单的,等你说点菜了老板才会拿起菜单给你,而且整个饭店就有一份菜单。
package yang.instance;
public class Singleton2 {
private static Singleton2 singleton2;
private Singleton2(){
}
public static Singleton2 getInsctance(){
if(singleton2==null){
singleton2=new Singleton2();
}
return singleton2;
}
}
那么这两种模式适用于哪种情况下
饿汉式是立刻加载,无论你是否会用到这个对象都会加载。
如果你在构造方法里面性能消耗较大、耗时比较长的代码,比如和数据库的连接,那么程序就会在启动的时候比较慢。
懒汉式就是延迟的加载方法,只有在使用的时候才会加载,在使用懒汉式的时候,在加载的时候你会明显感觉加载比较快,因为这时候并没有做对象的实例化,但是当你在第一次调用的时候,会进行实例化操作,这时候你就会感觉比较慢。