前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式《单例设计模式》

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

作者头像
梅花
发布2020-09-28 10:28:57
7470
发布2020-09-28 10:28:57
举报
文章被收录于专栏:梅花的学习记录

第一种 : 饿汉单例模式

代码语言:javascript
复制
/**   
 * 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;
    }

}

第二种:懒加载模式

代码语言:javascript
复制
 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 }

第三种 静态内部类实现单例模式

代码语言:javascript
复制
 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 }

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

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

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

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

效率时间比较

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-03-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一种 : 饿汉单例模式
  • 第二种:懒加载模式
  • 第三种 静态内部类实现单例模式
  • 常见的五中单例模式实现方式
  • 通过反射绕过单例的解决方案
  • 序列化_绕过单例模式的解决方案
  • 使用多线程测试不同单例实现方法的效率问题
  • 效率时间比较
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档