设计模式《单例设计模式》
第一种 : 饿汉单例模式
/** * Copyright © 2019 eSunny Info. Tech Ltd. All rights reserved. * * 功能描述: * @Package: com.zuoyan.singleton.demo * @author: Administrator * @date: 2019年3月27日 上午8:47:01 */ package com.zuoyan.singleton.demo; /** * Copyright: Copyright (c) 2019 ZuoYanCoder * * @ClassName: SingletonHungry.java * @Description: 饿汉式单例,程序一加入到内存就开始创建对象了 * * @version: v1.0.0 * @author: Administrator * @date: 2019年3月27日 上午8:47:01 * * Modification History: * Date Author Version Description *---------------------------------------------------------* * 2019年3月27日 Administrator v1.0.0 修改原因 */ public class SingletonHungry { private static SingletonHungry single = new SingletonHungry(); //私有 构造函数 private SingletonHungry(){}; //获取单例对象 public static SingletonHungry getSingleTonInstance() { return single; } }
第二种:懒加载模式
1 /** 2 * Copyright © 2019 eSunny Info. Tech ZuoYanCoder. All rights reserved. 3 * 4 * 功能描述: 5 * @Package: com.zuoyan.singleton.demo 6 * @author: Administrator 7 * @date: 2019年3月27日 上午8:52:54 8 */ 9 package com.zuoyan.singleton.demo; 10 11 /** 12 * Copyright: Copyright (c) 2019 ZuoYanCoder 13 * 14 * @ClassName: SingletonLazy.java 15 * @Description: 懒汉式单例模式 16 * 特点: 对象是方法被调用时才初始化,也叫做对象的延时加载。称为懒汉式 17 * Single类进内存,对象还没有存在,只用调用了getInstance方法时,才创建。 18 * 19 * @version: v1.0.0 20 * @author: Administrator 21 * @date: 2019年3月27日 上午8:52:54 22 * 23 * Modification History: 24 * Date Author Version Description 25 *---------------------------------------------------------* 26 * 2019年3月27日 Administrator v1.0.0 修改原因 27 */ 28 public class SingletonLazy { 29 30 private static SingletonLazy single = null; 31 private SingletonLazy(){} 32 33 public static SingletonLazy getInstance(){ 34 if(single ==null) 35 { 36 synchronized (SingletonLazy.class) { 37 single= new SingletonLazy(); 38 } 39 } 40 return single; 41 } 42 43 }
第三种 静态内部类实现单例模式
1 /** 2 * Copyright © 2019 eSunny Info. Tech ZuoYanCoder. All rights reserved. 3 * 4 * 功能描述: 5 * @Package: com.zuoyan.singleton.demo 6 * @author: Administrator 7 * @date: 2019年3月27日 上午8:58:58 8 */ 9 package com.zuoyan.singleton.demo; 10 11 /** 12 * Copyright: Copyright (c) 2019 ZuoYanCoder 13 * 14 * @ClassName: SingletonStaticInnerClass.java 15 * @Description: 静态内部类实现,也是懒加载的一种方式 16 * 要点: 17 * 1.外部类没有static属性,则不会像饿汉式那样 立即加载对象 18 * 2.只有真正调用getInstance(),才会加载静态内部类。加载类是线程安全的 19 * 。instance 是static final类型,保证了内存中只会存在一个这样的实例 20 * 而且只能被赋值一次,从而保证了线程安全性 21 * 3.兼备了高并发高效调用和延迟加载的优势! 22 * 23 * @version: v1.0.0 24 * @author: Administrator 25 * @date: 2019年3月27日 上午8:58:58 26 * 27 * Modification History: 28 * Date Author Version Description 29 *---------------------------------------------------------* 30 * 2019年3月27日 Administrator v1.0.0 修改原因 31 */ 32 public class SingletonStaticInnerClass { 33 34 private static class SingletonClassInstance{ 35 private static final SingletonStaticInnerClass instance= new SingletonStaticInnerClass(); 36 } 37 38 private SingletonStaticInnerClass(){} 39 40 41 public SingletonStaticInnerClass getSingletonInstance(){ 42 return SingletonClassInstance.instance; 43 } 44 45 }
常见的五中单例模式实现方式
通过反射绕过单例的解决方案
序列化_绕过单例模式的解决方案
使用多线程测试不同单例实现方法的效率问题
效率时间比较