简便回答版
1.懒汉式单例:一开始没有被实例化,需要用的时候自己去实例化创建,代码原理就是:定义一个静态的对象但是不去new它,需要用这个对象的时候再去new。
public class Singleton { //默认不会实例化,什么时候用就什么时候new private static Singleton instance = null; private Singleton(){ } public static synchronized Singleton getInstance(){ if(instance == null){ //什么时候用就什么时候new instance = new Singleton(); } return instance; } }
2.饿汉式单例:类一开始加载的时候就将对象实例化完成了,后面需要用的时候直接拿对象就行了。
public class Singleton { //一开始类加载的时候就实例化,创建单实例对象 private static Singleton instance = new Singleton(); private Singleton(){ } public static Singleton getInstance(){ return instance; } }
2.工厂模式:spring就是工厂模式,通过bean将对象注入到beanFactory工厂里面,后续创建对象就是工厂帮我们创建对象,我们只需要调用就可以了。
注:懒汉和饿汉借鉴的是这位大佬的博客整理