单例模式是java程序面试过程中最常被问到的设计模式之一。好了,不废话
按照字面的理解:单例模式就是只能new出来一个对象的类
通过单例模式我们可以保证系统中只有一个实例,比如说webserver的application,易于被外界访问,从而节约系统资源
就比如说在邮局里面有一本电话本,有需要的人拿出来查一下,而不是为每次查电话的人都拿出一本新的出来,查完再回收。
一般来说,我们常用到的单例模式一般只分为饿汉式跟懒汉式单例模式(这里不讨论饿汉的特殊变种:静态块,静态内部类,双重校验锁,枚举)
懒汉式单例模式:
主要是线程安全,但是效率很低(99%的情况不需要线程同步)
public class Singleton{
private Singleton(){}
private static Singleton instance = null;
public static synchronized Singleton getInstance(){
if(instance == null)
instance = new Singleton();
return instance;
}
}
饿汉式单例模式:
效率高,但是占资源,顾名思义(超级会吃的汉纸,把资源都吃掉了!)
public class Singleton{
private Singleton(){}
private static Singleton instance = new Singleton();
public static Singleton getInstance(){
return instance;
}
}