这篇文章主要是用来自己以后便于查阅的,如果还有补充请大家下边给出,如果有错误大家指出,我及时修正!我们一起进步!!
一、单例设计模式的应用方面
说实话,我也没有使用过单例,只是觉得他有用就学习了。不过通过现实生活,我觉得有以下这几种:
1.windows系统中的任务管理器
2.java JVM 中的 垃圾处理机制GC
3.我们使用的计数器,如:页面上面的访问数量的统计(一般使用线程安全的ATUOINTEGER)
二、单例模式的Demo
1.
/** * 设计模式:单例 * @author 王坤 * @time 2018-10-10 上午9:26 * @function 懒汉式1 * 线程不安全,不推荐使用 */ public class SingleTon1 { private static SingleTon1 singleTon1 = null; private SingleTon1(){} public static SingleTon1 getInstance(){ if(singleTon1 == null){ singleTon1 = new SingleTon1(); } return singleTon1; } } |
2.
/** * 设计模式:单例 * @author 王坤 * @time 2018-10-10 上午9:26 * @function 懒汉式2 * 线程安全,但是效率低下,不推荐使用 */ public class SingleTon2 { private static SingleTon2 singleTon1 = null; private SingleTon2(){} public synchronized static SingleTon2 getInstance(){ if(singleTon1 == null){ singleTon1 = new SingleTon2(); } return singleTon1; } } |
3.
/** * 设计模式:单例 * @author 王坤 * @time 2018-10-10 上午9:26 * @function 饿汉式1 * 线程安全,但是项目加载的时候,该类的实例就被创建出来了,效率不是很高。 */ public class SingleTon3 { private static final SingleTon3 singleTon1 = new SingleTon3(); private SingleTon3(){} public static SingleTon3 getInstance(){ return singleTon1; } } |
4.
/** * 设计模式:单例 * @author 王坤 * @time 2018-10-10 上午9:26 * @function 饿汉式2 * 线程安全,但是项目加载的时候,该类的实例就被创建出来了,效率不是很高。 */ public class SingleTon4 { private static SingleTon4 singleTon1 = null; static { try{ singleTon1 = new SingleTon4(); }catch (Exception e){ //打印日志 } } private SingleTon4(){} public static SingleTon4 getInstance(){ return singleTon1; } } |
5.
/** * 设计模式:单例 * @author 王坤 * @time 2018-10-10 上午9:26 * @function 内部类 * 线程安全,推荐使用 */ public class SingleTon5 { private SingleTon5(){} public static SingleTon5 getInstance(){ return SingleTonHandle.SINGLE_TON_5; } /* 不会出现工程加载的时候,就创建SingleTon5的实例的情况 */ private static class SingleTonHandle{ private static final SingleTon5 SINGLE_TON_5 = new SingleTon5(); } } |
6.
/** * 设计模式:单例 * @author 王坤 * @time 2018-10-10 上午9:26 * @function 双重检验锁机制 * 线程安全,推荐使用 */ public class SingleTon6 { private static SingleTon6 singleTon6 = null; private SingleTon6(){} public static SingleTon6 getInstance(){ if(singleTon6 == null){ synchronized (SingleTon6.class){ if(singleTon6 == null){ singleTon6 = new SingleTon6(); } } } return singleTon6; } } |
7.
/** * 设计模式:单例 * @author 王坤 * @time 2018-10-10 上午9:26 * @function 使用枚举 * 线程安全,推荐使用,支持反编译 */ public enum SingleTon7 { SINGLE_TON_7; private String key; public void SingleTon7(){ } public void setKey(String key){ this.key = key; } public String getKey(){ return key; } } |