一篇文章带你搞懂“设计模式”! - - 单例模式(2)
单例模式所谓类的单例设计模式就是采取一定的方法保证在整个的软件系统中对某个类只能存在一个对象实例并且该类只提供一个取得其对象实例的方法。单例模式有八种方式饿汉式(静态常量)、饿汉式(静态代码块)、懒汉式(线程不安全)、懒汉式(线程安全同步方法)、懒汉式(线程安全同步代码块)、双重检查、静态内部类、枚举第一种饿汉式静态常量实现步骤如下构造器私有化防止被new类的内部创建对象向外部暴露一个静态的公共方法getInstanceclass Singleton { // 1.构造器私有化 private Singleton() { // ... } // 2.在本类内部创建对象实例 private final static Singleton instance new Singleton(); // 3.对外提供一个公有的静态方法返回实例对象 public static Singleton getInstance() { return instance; } }优点写法简单在类装载的时候完成实例化避免了线程同步问题缺点在类装载的时候完成实例化没有懒加载的效果。如果未曾使用过这个类会造成内存的浪费第二种饿汉式静态代码块class Singleton { // 1.构造器私有化 private Singleton() { // ... } // 2.在本类内部声明静态对象属性 private static Singleton instance; // 3.使用静态代码块创建对象 static { instance new Singleton(); } // 4.对外提供一个公有的静态方法返回实例对象 public static Singleton getInstance() { return instance; } }优缺点与静态常量一样无非就是把实例化过程放在了静态代码块第三种懒汉式线程不安全class Singleton { private static Singleton instance; private Singleton() {} // 提供一个静态的公有方法当使用到该方法的时才去创建实例 public static Singleton getInstance() { if (instance null) { instance new Singleton(); } return instance; } }优缺点起到了懒加载的效果但是只能在单线程下使用。如果在多线程下使用由于静态获取方法未进行线程安全处理可能会导致产生多个实例因此实际开发中不建议使用第四种懒汉式线程安全同步方法class Singleton { private static Singleton instance; private Singleton() {} // 提供一个静态的公有方法当使用到该方法的时才去创建实例 // 加入了synchronized的同步处理机制解决线程安全问题 public static synchronized Singleton getInstance() { if (instance null) { instance new Singleton(); } return instance; } }优缺点解决了线程不安全问题但是由于同步处理导致效率低其实获取方法只要执行一次就够了因此实际开发中也不建议使用第五种懒汉式线程安全同步代码块class Singleton { private static Singleton instance; private Singleton() {} // 提供一个静态的公有方法当使用到该方法的时才去创建实例 public static Singleton getInstance() { if (instance null) { synchronized (Singleton.class) { instance new Singleton(); } } return instance; } }优缺点这种方法本意为了改进前一种的效率问题但是反而起不到线程同步作用依旧可能有多个线程进到if语句会产生多个实例因此实际开发中不能使用第六种双重检查class Singleton { // 使用轻量级volatile private static volatile Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance null) { synchronized (Singleton.class) { // 第二次检查防止重复创建实例 if (instance null) { instance new Singleton(); } } } return instance; } }优缺点双重检查有效保证了线程安全同时也避免反复进行方法同步提高效率满足线程安全延迟加载效率高实际开发中推荐使用第七种静态内部类class Singleton { private Singleton() {} // 创建一个静态内部类 private static class SingletonInstance { private static final Singleton INSTANCE new Singleton(); } public static Singleton getInstance(){ return SingletonInstance.INSTANCE; } }优缺点这种方法采用了类装载的机制来保证初始化实例只有一个线程静态内部类方式在Singleton类被装载时并不会立即实例化而是在需要实例化时调用getInstance方法才会装载SingletonInstance类从而完成Singleton的实例化。类的静态属性只会在第一次加载类的时候初始化所以在这里JVM帮助我们保证了线程的安全性因为在类进行初始化时是线程安全的别的线程无法进入。因此避免了线程不安全利用静态内部类特点实现延迟加载效率高。实际开发中推荐使用。第八种枚举enum Singleton { INSTACNE; public void method() { // ... } }优缺点通过枚举来实现单例模式不仅能避免多线程同步问题而且还能防止反序列化重新创建新的对象推荐使用使用单例模式的注意事项单例模式保证了系统内存中该类只存在一个对象节省了系统资源对于一些需要频繁创建销毁的对象使用单例模式可以提高系统性能当想实例化一个单例类的时候必须要记住使用相应的获取对象的方法而不是直接使用new单例模式的使用场景需要频繁创建和销毁对象创建对象时耗时过多或耗费资源过多大对象但又要经常用到的对象工具类对象频繁访问数据库或文件的对象比如数据源、session工厂等

相关新闻

大规模语言模型在自动编程助手中的交互式应用

大规模语言模型在自动编程助手中的交互式应用

大规模语言模型在自动编程助手中的交互式应用关键词:大规模语言模型、自动编程助手、交互式应用、代码生成、编程辅助摘要:本文深入探讨了大规模语言模型在自动编程助手中的交互式应用。首先介绍了相关背景,包括目的、预期读者、文档结构和术…

2026/7/3 3:52:01 阅读更多 →
Java Web 和餐饮管理系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

Java Web 和餐饮管理系统系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

摘要 随着信息技术的快速发展,餐饮行业的管理模式正逐步从传统手工操作向数字化、智能化转型。餐饮管理系统能够有效提升餐厅运营效率,优化顾客体验,降低人力成本。传统的餐饮管理依赖纸质记录和人工统计,容易出现数据错误、效率低…

2026/7/2 20:33:40 阅读更多 →
【毕业设计】SpringBoot+Vue+MySQL 在线互动学习网站平台源码+数据库+论文+部署文档

【毕业设计】SpringBoot+Vue+MySQL 在线互动学习网站平台源码+数据库+论文+部署文档

摘要 随着信息技术的快速发展和互联网的普及,在线教育已成为现代教育体系中不可或缺的一部分。传统的教学模式受限于时间和空间,难以满足学习者多样化的需求,而在线互动学习平台能够突破这些限制,提供灵活、高效的学习方式。尤其是…

2026/7/3 4:47:14 阅读更多 →

最新新闻

销售预测实战:用时间序列分解与SARIMAX提升准确率

销售预测实战:用时间序列分解与SARIMAX提升准确率

1. 项目概述:为什么销售预测不能只靠“拍脑袋”,而必须深挖时间序列的底层逻辑做销售预测这件事,我干了快十二年,从最早拿Excel拉移动平均线,到后来用Python写完整pipeline跑SARIMA,再到如今在生产环境里维…

2026/7/3 4:47:15 阅读更多 →
质量好的全屋定制厂商名声

质量好的全屋定制厂商名声

我在宝鸡做了12年全屋定制,从2014年开店,到2017年自建工厂,再到如今服务超20000户业主,见过太多业主踩坑。今天我用真实数据和案例,拆解全屋定制行业的4个“潜规则”,看完能帮你省下至少三分之一预算。一、…

2026/7/3 4:45:15 阅读更多 →
2026最新实测:2026年6月什么 AI 命理软件好用?别只看它会不会说漂亮话

2026最新实测:2026年6月什么 AI 命理软件好用?别只看它会不会说漂亮话

2026最新实测:2026年6月什么 AI 命理软件好用?别只看它会不会说漂亮话 核心摘要:2026年7月2日再回答“什么 AI 命理软件好用”,不能只看排盘速度、界面漂亮或 AI 话术顺不顺。结合 2026年6月最新资料复核,第三方测评更…

2026/7/3 4:45:15 阅读更多 →
云克隆 Luminex 多因子技术在细胞因子领域是应用

云克隆 Luminex 多因子技术在细胞因子领域是应用

在免疫学与炎症研究的前沿领域,传统单因子检测方法早已无法满足科研人员对复杂细胞因子分析需求。武汉云克隆科技股份有限公司(Cloud-Clone Corp.)近日宣布,其基于Luminex xMAP技术自主研发的15重炎症趋化因子联合检测Panel&#…

2026/7/3 4:43:15 阅读更多 →
【学习记录】Week8(三):从整数漏洞到堆溢出——深入理解内存破坏的进阶利用链

【学习记录】Week8(三):从整数漏洞到堆溢出——深入理解内存破坏的进阶利用链

写在前面:在Week8的前两篇中,我们系统学习了整数溢出/下溢和符号转换/长度计算错误的原理。今天,我们将迎来本周的高潮——探讨这些看似抽象的整数漏洞如何直接导致严重的堆溢出,并最终实现任意代码执行。与栈溢出不同&#xff0c…

2026/7/3 4:41:14 阅读更多 →
青岛有哪些AI智能体落地案例?企业真实应用效果参考

青岛有哪些AI智能体落地案例?企业真实应用效果参考

随着人工智能从“概念狂欢”走向“价值落地”,2026年的企业数字化转型开始研究AI智能体(AI Agent)究竟能为业务带来多少降本增效的真实改变。 作为山东数字经济发展的核心城市,青岛在人工智能与实体经济融合方面一直走在前列。从灯…

2026/7/3 4:39:14 阅读更多 →

日新闻

Nginx防御TLS重协商攻击实战:从原理到配置与监控

Nginx防御TLS重协商攻击实战:从原理到配置与监控

1. 项目概述:为什么TLS重协商攻击至今仍需警惕十多年前的CVE-2011-1473,一个关于TLS/SSL协议重协商机制的漏洞,现在提起来还有必要吗?很多运维和开发朋友可能会觉得,这都老掉牙了,现代服务器和客户端不都默…

2026/7/3 0:03:59 阅读更多 →
华为防火墙双通道远程管理实战:Web与SSH配置详解

华为防火墙双通道远程管理实战:Web与SSH配置详解

1. 项目概述:为什么需要双通道远程管理防火墙?在任何一个稍具规模的企业网络里,防火墙都是那个默默守护在边界的关键角色。作为网络工程师,我们不可能每次都跑到机房,插上console线去配置它。远程管理能力,…

2026/7/3 0:03:59 阅读更多 →
AD74413R与PIC18F65K40的高精度工业数据采集方案

AD74413R与PIC18F65K40的高精度工业数据采集方案

1. 项目概述:AD74413R与PIC18F65K40的协同工作在工业自动化和精密测量领域,同时实现高精度模数转换(ADC)和数模转换(DAC)功能是许多复杂系统的核心需求。AD74413R作为一款四通道可配置模拟输入/输出器件,与PIC18F65K40微控制器的组合&#xf…

2026/7/3 0:05:59 阅读更多 →

周新闻

月新闻