什么是单例模式?
单例模式有啥好处?有啥坏处?
单例模式有啥使用场景?
单例模式的实现
lazy(懒汉式)
/** * Description :懒汉式 ( 线程不安全 ) * 单线程下使用,如果是多线程下使用,在if条件判断的时候可能产生多个实例对象 * @author: manji * 2018/6/3 11:21 */ public class SingletonOne { private static SingletonOne singleton; /** * 私有空构造函数 */ private SingletonOne() {} public static SingletonOne getSingleton(){ if(singleton == null){ singleton = new SingletonOne(); } return singleton; } }
null
/** * Description :懒汉式 ( 线程安全 ) * 通过加syn锁的方式 去控制线程安全 * @author: manji * 2018/6/3 17:00 */ public class SingletonTwo { private static SingletonTwo singletonTwo; private SingletonTwo() {} public static synchronized SingletonTwo getInstance(){ if (singletonTwo == null){ singletonTwo = new SingletonTwo(); } return singletonTwo; } }
null
/** * Description :懒汉式加载 ( 同步代码块加载模式 ) * * @author: manji * 2018/6/3 18:39 */ public class SingletonThree { private static SingletonThree singletonThree; private SingletonThree(){} public static SingletonThree getInstance(){ if ( singletonThree == null){ synchronized(SingletonThree.class){ singletonThree = new SingletonThree(); } } return singletonThree; } }
hungry(饿汉式)
/** * Description :饿汉式 ( ) * 在类创建的时候就创建 静态变量 然后可以直接通过静态方式 去掉用获得单例对象 * @author: manji * 2018/6/3 18:12 */ public class SingletonOne { private SingletonOne(){} private static final SingletonOne singletonOne = new SingletonOne(); public static SingletonOne getInstance(){ return singletonOne; } }
null
/** * Description :饿汉式 静态代码块初始化类 * * @author: manji * 2018/6/3 18:59 */ public class SingletonTwo { private static SingletonTwo singletonTwo; static { singletonTwo = new SingletonTwo(); } private SingletonTwo(){} public static SingletonTwo getInstance(){ return singletonTwo; } }