设计模式《单例设计模式》

第一种 : 饿汉单例模式

  

/**   
 * 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 }

常见的五中单例模式实现方式

通过反射绕过单例的解决方案

序列化_绕过单例模式的解决方案

使用多线程测试不同单例实现方法的效率问题

效率时间比较

原文地址:https://www.cnblogs.com/kangxinxin/p/10606706.html