JAVA设计模式之单例模式在开发中的最常用实现方式

解释Java中的单例模式及其实现方式。 每种实现方式都有其适用场景和优缺点,开发者可以根据实际需求选择最适合的实现方式。例如,如果你的应用需要延迟加载(即直到真正需要对象的时候才创建它),那么可以选择懒汉式或静态内部类;而如果你不需要延迟加载,或者更关注于简单性和线程安全性,那么饿汉式或枚举可能是更好的选择。单例模式(Singleton Pattern)是软件工程中的一种设计模式,属于创建型模式。它的目的是确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。单例模式常用于需要控制资源访问的情况,如数据库连接、线程池等。 阅读详情

前言

  在Java的诸多设计模式中,我们在开发中使用最简单的大概应该是单例模式了。单例模式的实现我们通常用getInstance() 方法,不管在那个类里面调用这个方法,都只能获取到该类的唯一实例,也就是说在不同的地方调用这个方法获取的都是同一个对象。单例模式的构造器通常是私有的,这样就避免了其他类通过创建构造器的方法创建实例。

实现方式

  这里我们只列举两种实现方式,也是在我们开发中经常使用的实现方式,至于像懒汉式、饿汉式、枚举什么的,大概了解下就OK了,实际开发中很少用到。

一、 静态内部类实现单例模式

public class Singleton {
    private Singleton() {}

    private static class SingletonHolder {
        private static Singleton singletonHolder = new Singleton();
    }

    public static Singleton getInstance() {
        return SingletonHolder.singletonHolder;
    }
}

  这种方式是我来到新公司后经常接触的一种实现方式,也是我非常建议大家去写的一种方式。他的实现思想就是把Singleton 实例放到一个静态内部类SingletonHolder中,这样就能避免静态实例在Singleton 类开始加载的时候就创建出来引发的资源浪费,并且因为这个静态内部类只会被加载一次,所以在多线程调用getInstance() 方法的时候也能够保证线程安全。

二、DCL(双重校验锁)实现单例模式


public class Singleton {  
    private volatile static Singleton singleton;  
    private Singleton (){}  
    public static Singleton getSingleton() {  
    if (singleton == null) {  
        synchronized (Singleton.class) {  
        if (singleton == null) {  
            singleton = new Singleton();  
        }  
        }  
    }  
    return singleton;  
    }  
}

  这里采用的是双重检查+锁的方式,安全且在多线程情况下能保持高性能。这里主要介绍下为什么要检查两次,进入方法过后,先检查实例是否存在,如果不存在才进入下面的同步块,这是第一重检查。进入同步块过后,再次检查实例是否存在,如果不存在,就在同步的情况下创建一个实例,这是第二重检查。这样一来,就只需要同步一次了,从而减少了多次在同步情况下进行判断所浪费的时间。

最后

  其实还是要感谢这位作者的这篇文章 Java设计模式之单例模式及线程安全的懒加载实现,对单例模式各种实现讲解的真的很详细,我只不过是简单的介绍了下我们开发工作中最常使用的两种实现方式,想看更多的实现方式可以去看这篇文章。作者最后强烈推荐枚举实现单例模式的方式,这里也补充下:

public enum  Singleton {
    instance;
 
    public static Singleton getInstance() {
        return instance;
    }
}

  我也很喜欢这种实现方式,它是最简单的单例实现方式。但是我在工作中很少见到这种单例的实现方式,如果日后我经常在工作中遇到的话,我会考虑把DCL的那种实现方式用枚举方式替换掉。

常用的设计模式(Java 实现) 设计模式是软件开发中非常重要的一部分,掌握常用的设计模式能够帮助我们解决很多常见的设计问题。本文介绍了单例模式工厂方法模式观察者模式策略模式装饰器模式代理模式等几种常用的设计模式。通过 Java 示例,我们可以清晰地理解每个设计模式的作用和实现方式。掌握设计模式能够提高代码的可维护性、可扩展性和灵活性,使得开发人员能够更加高效地设计和构建复杂的应用程序。 阅读详情

相关推荐

详细剖析Java中单例模式的正确用法

单例模式是一种保证类仅有一个实例并提供全局访问点的设计模式。它主要用于节省内存资源、避免重复计算和确保结果正确性,适用于无状态工具类或全局信息类场景。常见的实现方式包括饿汉式、懒汉式、双重检查锁、静态内部类和枚举等。其中枚举方式最为推荐,因为它天然具备线程安全性,并能防止反序列化和反射破坏单例。其他实现方式需要注意防御反射攻击、序列化破坏和多类加载器问题。单例模式广泛应用于配置管理、资源池、日志系统等场景,但在使用时需权衡其优缺点,避免滥用。

Java 后端|Python|AI 实战博主。专注微服务、分布式、大模型应用开发,输出可落地项目、源码剖析与面试总结。用通俗文字拆解技术难点,记录开发路上的学习与踩坑,期待和大家一起交流成长。 838

设计模式-单例模式

设计模式-单例模式单例模式定义及特点单例模式的优点和缺点单例模式的应用场景单例模式的实现第 1 种:懒汉式单例第 2 种:饿汉式单例 单例模式定义及特点 单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。 单例模式有 3 个特点: 单例类只有一个实例对象; 该单例对象必须由单例类自行创建; 单例类对外提供一个访问该单例的全局访问点。 单例模式的优点和缺点 单例模式的优点: 单例模式可以保证内存里只有一个实例,减少了内存的开销。 可以避免对资源的多重占用。 单例模

csdn565973850的博客 783

Java 设计模式:单例模式的 10 种实现方式及优缺点

私有化构造方法:防止外部通过new关键字创建实例。提供一个静态的私有实例:确保类只有一个实例。提供一个公共的静态方法:用于获取唯一的实例。单例模式可以分为“懒汉式”和“饿汉式”两大类,其中懒汉式在需要时才创建实例,而饿汉式在类加载时就创建实例。此外,还有一些更高级的实现方式,比如使用枚举、静态内部类等。单例模式的实现方式多种多样,每种方式都有其适用场景和优缺点。简单场景:推荐使用静态内部类或枚举实现。需要延迟加载:使用双重检查锁定。需要管理多个单例:使用容器式单例。需要防止反射攻击。

shrgegrb的博客 892

实现单例模式的八种方法

一.单例模式的定义: 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例 二.单例模式的特点  1、单例类只能有一个实例。   2、单例类必须自己创建自己的唯一实例。  3、单例类必须给所有其他对象提供这一实例。   三.线程安全问题: 一方面在获取单例的时候,要保证不能产生多个实例对象,后面会详细讲到五种实现方式; 另一方面,在使用单例对象的时候,要注意单例对象内的实例变量是...

weixin_45522644的博客 1704

4D毫米波雷达点云可视化实战:从CANFD原始数据到Matplotlib三维动态图

本文详细介绍了4D毫米波雷达点云可视化实战,从CANFD原始数据解析到Matplotlib三维动态图实现的全流程。通过解析CANFD数据帧结构、点云数据编码原理,并结合Python实现CANFD通信接口,帮助开发者掌握4D雷达数据处理与优化技巧,最终实现高性能的3D点云动态可视化。

u9v0w的博客 568

Qwen2.5-Omni实战:5分钟搞定多模态AI模型本地部署(含Thinker-Talker架构解析)

本文详细介绍了Qwen2.5-Omni多模态AI模型的本地部署流程,包括硬件配置、环境准备和实战应用开发。特别解析了其创新的Thinker-Talker架构,该架构通过TMRoPE位置编码实现跨模态同步处理,大幅提升多模态任务效率。5分钟即可完成部署,适合开发者快速实现文本、图像和音频的联合处理。

weixin_29085865的博客 171

java单例模式应用_Java设计模式之单例模式及其应用

一、 单例模式概述Java中单例模式的定义是:一个类只有一个实例,而且自行实例化并且向整个系统提供这个实例。优点:由于单例模式在内存中只有一个实例,减少了内存开支和系统的性能开销;单例模式可以避免对资源的多重占用。二、单例模式的几种形式1. 饿汉式单例public class Singleton {private static final Singleton singleton= new Sin...

weixin_35545563的博客 282

HAL库:中断处理函数 及 weak弱声明中断回调函数 详解

HAL库中断处理函数 及 weak弱声明中断回调函数

L_Z_J_I的博客 5162

java中单例的应用_浅谈Java中单例模式的几种应用

目录浅谈Java中单例模式的几种应用第一种:懒汉式第二种:饿汉式第三种:双重检索式第四种:注册登记式第五种:内部类形式浅谈Java中单例模式的几种应用日常开发中,为了提高我们系统中对象的复用性,大多采用单例模式的写法,以达到在系统中重复利用对象的目的。下面小编为大家简单介绍几种日常开发中常见的单例模式写法,以供参考和使用!如果有疑问大家可以留言公共讨论,共同学习进步。第一种:懒汉式懒汉的方式正如字...

weixin_31951989的博客 377

统信UOS系统网络服务异常排查:WIFI图标消失与网络设置缺失的解决方案

本文详细解析了统信UOS系统WIFI图标消失与网络设置缺失的常见问题,提供了从基础修复到进阶排查的完整解决方案。重点分析了NetworkManager服务异常的根本原因,包括系统更新中断、权限配置错误等,并给出实用的命令行操作指南和预防措施,帮助用户快速恢复网络功能。

weixin_29234239的博客 613

三部对接 sora-2:OpenAI 最新视频模型快速接入指南

本文介绍OpenAI最新视频生成模型Sora-2的接入方案,重点解析其Chat格式调用功能。开发者可通过在提示词中嵌入"横屏/竖屏""时长""清晰度"等要求快速生成视频。文章分三部分:1)基础准备(环境配置与API密钥获取);2)核心调用(提供Python/Java示例代码);3)结果查询与优化建议。Sora-2支持多语言调用,简化了视频生成流程,适用于短视频、广告创意等场景。

2501_93565190的博客 3422

设计模式之单例设计模式

1 设计模式(Design pattern) 代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 JAVA一共有2...

weixin_55817753的博客 115

第五节 Amesim《直动型溢流阀HCD建模》HCD5 学习资料

利用HCD原则创建直动型溢流阀的界面。这可能包括图形化表示直动型溢流阀的工作原理、操作方式和调节方法。这样的界面应当直观且易于理解,使用户能够轻松了解阀门的功能和使用方法。

m0_58052642的博客 1330

java单例模式——详解JAVA单例模式及8种实现方式

本文转载自:java单例模式——详解JAVA单例模式及8种实现方式_EatingSoilLang的博客-优快云博客_java单例模式 ## 单例模式是最简单也是最基础的设计模式之一,下边一起学习一下单例模式! 一.单例模式的定义: 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler

chali1314的博客 2万+

128x64 OLED屏的救星:手把手教你用纯C实现轻量级多级菜单

本文针对资源受限的单片机开发场景,提供了一套用纯C语言实现128x64 OLED屏轻量级多级菜单的完整方案。该方案摒弃了传统的树形指针结构,创新性地采用哈希表进行菜单项管理,核心代码不足200行,内存占用极低,逻辑清晰且易于维护。文章详细阐述了架构设计、实战演练及性能优化技巧,是STM32、ESP8266等小内存MCU项目的理想选择。

table的专栏 226

rk3588 LightSensor适配从驱动到应用层

本文详细介绍了在RK3588平台上实现光感驱动的开发流程。主要包括:1) 在设备树中配置I2C5接口挂载光感设备;2) 编写内核驱动代码实现光感数据采集;3) HAL层通过ioctl与驱动交互;4) 在BoardConfig.mk中启用相关宏定义;5) Framework层通过AutomaticBrightnessController实现自动亮度调节算法;6) 应用层可通过监听系统设置获取光感变化并调整屏幕亮度。整个流程涵盖了从底层驱动到上层应用的完整实现方案,重点解决了光感设备注册、数据采集传输和自动亮度

tzj1058756809的博客 448

java开发中的设计模式之单例模式

单例模式是一种设计模式,它限制一个类只能创建一个实例,并提供一个全局访问点来获取这个实例。这意味着无论在程序的哪个部分请求该类的实例,始终返回的是同一个对象。单例模式的核心思想是通过私有化构造方法和静态方法(或枚举)来控制实例的创建和访问。单例模式是Java开发中常用的设计模式,通过限制类的实例数量并提供全局访问点,能够有效管理共享资源和状态。根据具体需求,可以选择饿汉式、懒汉式、双重检查锁、静态内部类或枚举等方式实现。在实际开发中,如数据库连接池、日志管理等场景,单例模式都能显著提升代码复用性和系统性能。

cuijiying的博客 1653

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

java:单例模式的五种实现方式

目录 1. 概述 2. 优缺点 3. 单例模式实现方式 3.1 饿汉式 3.2 懒汉式 3.3 double-checked locking(双重检查锁) 3.4 静态内部类 3.5 枚举 1. 概述 java单例模式是一种常见的设计模式。 单例模式有以下特点: 单例类只能有一个实例; 单例类必须自己创建自己的唯一实例; 单例类必须给所有其他对象提供这一实例; 2. 优缺点 优点:由于单例模式只生成了一个实例,所以能够节约系统资源,减少性能开销,提高系统运行效率。 缺点:因为系统中只有一个实例,导致了单

weixin_42602900的博客 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

设计模式之单例模式:原理、实现与应用

单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。单例模式通常用于管理共享资源,如数据库连接、线程池、配置管理等。单例模式是设计模式中最基础且常用的模式之一,适用于需要全局唯一实例的场景。通过掌握单例模式的原理、实现方式以及最佳实践,你可以在实际开发中更好地应用这一模式。希望本文能为你的设计模式学习之旅提供一些实用的指导!防止反序列化破坏单例:通过实现方法防止反序列化创建新实例。

wenbin_java的博客 2035

设计模式实战——开发中常用到的单例模式

定义:单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。特点单一实例:通过私有构造函数或静态方法确保整个应用中只存在一个实例对象。全局访问点:提供一个静态方法供外部调用,以获取该类的唯一实例。延迟初始化:在需要时才创建实例,以节省资源并提高效率。JDK中的单例模式主要体现在Runtime类和GUI相关类中。Runtime类定义与特点。

2301_76419561的博客 1565

[ Java ] 单例模式 的八种实现方式

单例模式保证了系统内存中该类只存在一个对象,节省了系统资源,对于一些需要频繁创建销毁的对象,使用单例模式可以提高系统性能。

爪白白的个人博客 4706

Java设计模式——单例模式

介绍Java设计模式的八种单例模式

m0_62946761的博客 7270

设计模式:单例模式的8种实现方式

定义 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提 供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 核心思想:构造方法私有化。 原理 单例模式的类中有且仅有一个实例被创建,其他的类要使用单例对象时都要通过这个类提供的特殊渠道来进行获取。 如果不想有那么多的实例,可以使构造方法私有化。

weixin_46379561的博客 449

【设计模式】Java单例模式 实现方式(附案例源代码)

单例模式是一种常用的设计模式,其主要特点是确保一个类在系统中只有一个实例,并提供一个全局访问点来访问这个实例。在Java中,单例模式可以通过不同的方式实现,包括饿汉式、懒汉式等。

A_aspectJ的博客 1358

Java 开发中最常用的七大设计模式:场景解析与代码实现

System.out.println(“手机充电电压:” + charger.getVolt5() + “V”);// 输出 true。System.out.println(“使用支付宝支付:” + amount + “元”);System.out.println(“使用微信支付:” + amount + “元”);链接:https://juejin.cn/post/7504175652771561511。

qq_22201881的博客 593
上一篇: 解决Android Studio 安装APK时device support,but apk only supports armeabi-v7 。问题
谦行
博客等级 码龄11年 182粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值