一篇文章带你搞懂“设计模式”! - - 单例模式(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/5/17 6:54:21 阅读更多 →

最新新闻

字段太多看不全,ksql 的展开模式和输出控制怎么用

字段太多看不全,ksql 的展开模式和输出控制怎么用

MySQL 里查宽表,字段多了输出就会折行,列对应关系容易看乱。MySQL 的解法是在 SQL 末尾加 \G,把每行的字段竖着列出来。ksql 里处理这个问题的方式不同——通过几个元命令控制整个会话的输出行为,不用每条 SQL 末尾单独加。 这篇在…

2026/7/3 3:50:58 阅读更多 →
抓包、TLS 指纹、UA 一致性分析工具

抓包、TLS 指纹、UA 一致性分析工具

TLSFOWARD:一款集抓包、TLS指纹分析与UA一致性验证于一体的专业工具 在接口调试、浏览器环境分析、爬虫环境排查以及测试排查等场景中,抓包是一项非常基础且常见的操作。 然而,仅仅查看 HTTP 请求往往是不够的。因为 User-Agent 可以被修改&a…

2026/7/3 3:48:58 阅读更多 →
继承、重载与多态

继承、重载与多态

继承是C中的一个重要特性&#xff0c;它可以让我们从一个类的部分成员继承并新建立一个类&#xff0c;class <派生类名> : <继承方式(public/protected/private)> <基类名>例如&#xff1a;//基类 class Animal{eat(); sleep(); }//派生类 class Dog : publi…

2026/7/3 3:46:58 阅读更多 →
2026年AI网站设计公司排名,品牌视觉定制企业盘点

2026年AI网站设计公司排名,品牌视觉定制企业盘点

2026年AI网站设计公司排名&#xff0c;品牌视觉定制企业盘点一、品牌视觉定制市场的需求变化2026年&#xff0c;企业官网已经从“有就行”升级到了“好看且好用”。据艾瑞咨询联合IDC发布的《2026年中国企业数字化建站行业白皮书》显示&#xff0c;2026年中国网站建设行业整体市…

2026/7/3 3:44:57 阅读更多 →
DeepSeek-V4定价逻辑:隐性成本优化与企业级AI落地新范式

DeepSeek-V4定价逻辑:隐性成本优化与企业级AI落地新范式

1. 这不是“买菜砍价”&#xff0c;而是大模型时代的价格认知重构DeepSeek-V4发布后&#xff0c;朋友圈和开发者群最常刷屏的一句话是&#xff1a;“这价格&#xff0c;是不是标错了&#xff1f;”——不是调侃&#xff0c;是真有人反复刷新官网页面确认。我第一时间拉了三台不…

2026/7/3 3:42:57 阅读更多 →
5分钟掌握VinXiangQi:高效实用的AI象棋连线工具终极指南

5分钟掌握VinXiangQi:高效实用的AI象棋连线工具终极指南

5分钟掌握VinXiangQi&#xff1a;高效实用的AI象棋连线工具终极指南 【免费下载链接】VinXiangQi Xiangqi syncing tool based on Yolov5 / 基于Yolov5的中国象棋连线工具 项目地址: https://gitcode.com/gh_mirrors/vi/VinXiangQi 你是否经常在网上对弈时遇到瓶颈&…

2026/7/3 3:42:56 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

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

周新闻

月新闻