【Java SE】单例设计模式

news2025/3/26 5:56:47

参考笔记:深入理解Java设计模式:单例模式及其饿汉式与懒汉式的对比,-CSDN博客

目录

1.什么是设计模式

2.经典设计模式

3.单例设计模式(static属性/方法经典使用场景 )

3.1 饿汉式单例模式

3.2 懒汉式单例模式

4.补充


1.什么是设计模式

设计模式是在大量的实践中总结和理论化之后优的代码结构、编程风格、以及解决问题的思考方式

2.经典设计模式

经典的设计模式共 23 种 

① 创建型模式,共 5 种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式

② 结构性模式,共 7 种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式

③ 行为型模式,共 11 种:策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式


3.单例设计模式(static属性/方法经典使用场景 )

单例设计模式:采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法

单例设计模式主要有以下三个特点:

① 只能有一个实例
② 必须自己创建自己的唯一实例  
③ 必须给所有其他对象提供这一实例

3.1 饿汉式单例模式

① 特点:立即加载,类加载时就会把 single 创建完毕

② 优点:实现简单,不会有多线程安全问题

③ 缺点:当类加载时,会初始化 static 变量,静态变量被创建并分配内存空间。从这以后,这个 sttaic 的实例便一直占着这块内存,直到类被卸载时,静态变量被销毁,并解释所占用的内存空间。因此饿汉式单例模式在特定条件下会耗费内存

public class Test {
    public static void main(String[] args) {
        Singleton single1 = Singleton.getInstance();
        Singleton single2 = Singleton.getInstance();
        System.out.println(single1==single2);//true
        System.out.println(single1);
        System.out.println(single2);
    }
}

//饿汉式单例模式
class Singleton {

    private String name;


    // 1.私有化构造器,防止直接在其他类new对象
    private Singleton(String name) {
        this.name = name;
    }

    // 2.内部提供一个当前类的实例
    // 4.为了能够在静态方法getInstance中返回变量,single也必须静态化(静态方法只能调用静态属性/方法)
    private static Singleton single = new Singleton("小马");

    // 3.提供公共的静态的方法,返回当前类的对象
    public static Singleton getInstance() {
        return single;
    }

    @Override
    public String toString() {
        return "Singleton{" +
                "name='" + name + '\'' +
                '}';
    }
}

3.2 懒汉式单例模式

先看代码,后面再总结

public class Test {
    public static void main(String[] args) {

        //single1和single2是同一对象
        Singleton single1 = Singleton.getInstance();
        Singleton single2 = Singleton.getInstance();
        System.out.println(single1==single2);//true
        System.out.println(single1);
        System.out.println(single2);
    }
}

//懒汉式单例模式
class Singleton {
    // 1.私有化构造器
    private Singleton() {
    }
    // 2.内部提供一个当前类的实例
    // 4.此实例也必须静态化
    private static Singleton single;
    // 3.提供公共的静态的方法,返回当前类的对象
    public static Singleton getInstance() {
        if(single == null) {
            single = new Singleton();
        }
        return single;
    }
}
/*输出结果
true
Singleton@1b6d3586
Singleton@1b6d3586
*/

① 特点:延迟加载,只有在调用静态方法 getInstancesingle 才被分配内存空间

② 优点:实现简单

    (1)饿汉式在类加载时就创建了对象实例,但是可能这个对象后面没有用或者用的少,就造成浪费;

    (2)懒汉式在类加载时 static 实例未被创建和分配内存空间,只有当静态方法 getInstance 第一次被调用时才返回对象,再次调用时,返回的也是上次调用的对象,因此保证了仅一个实例对象

③ 缺点:在多线程环境中,该实现方法存在线程安全问题,不能保证单例的唯一性

说明: 3 个线程同时进入 if 语句中,new3 次,破环了单例设计模式的原则 

4.补充

JavaSE 类库中,java.lang.Runtime 就是经典的单例模式,且是饿汉式的 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2320013.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安全守护:反光衣检测技术的革新之路

视觉分析助力船上工人反光衣检测 在现代工业生产与作业环境中,安全始终是首要考虑的因素。对于水上作业,如船舶维护、海上施工等场景,工人穿戴反光衣是预防事故、提高可见性的重要措施。然而,传统的人工检查方式不仅效率低下&…

OSCP准备靶场联系-Kioptrix 1

oscp 准备 Kioptrix 1 信息收集 ifconfig 确认自己的电脑ip,nmap收集通往段ip,确认靶机IP nmap 重点关注服务版本 nmap -sn 192.168.1.0/24 # 扫描网段内存活主机,不进行端口扫描[1,10](ref) nmap -sP 192.168.1.1 # 传统Ping扫描…

【工具变量】中国各地级市是否属于“信息惠民国家试点城市”匹配数据(2010-2024年)

数据来源:国家等12部门联合发布的《关于加快实施信息惠民工程有关工作的通知》 数据说明:内含原始文件和匹配结果,当试点城市在2014年及以后,赋值为1;试点城市在2014年之前或该城市从未实施信息惠民试点工程&#x…

深度学习 Deep Learning 第7章 深度学习的正则化

深度学习 第7章 深度学习的正则化 章节概述 正则化技术是深度学习中防止过拟合、提升模型泛化能力的核心手段。本章深入探讨了深度学习中的正则化技术,旨在解决模型在新数据上的泛化能力问题。正则化是通过在学习算法中引入额外的约束或惩罚项,来减少模…

使用DeepSeek翻译英文科技论文,以MarkDown格式输出,使用Writage 3.3.1插件转换为Word文件

一、使用DeepSeek翻译英文科技论文,以MarkDown格式输出 以科技论文“Electrical Power System Sizing within the Numerical Propulsion System Simulation”为例。 关于Writage 3.3.1的进一步了解,可发送邮件至邮箱pyengine163.com. 首先,打…

一文了解ThreadLocal

什么是ThreadLocal? ThreadLocal是每个线程私有的,线程可以把自己的私有数据放到ThreadLocal里面,不用担心其他线程访问到自己ThreadLocal。 通过set()方法将值存入ThreadLocal或者修改值,get()方法取出值,remove()方…

【免费】2000-2019年各省地方财政印花税数据

2000-2019年各省地方财政印花税数据 1、时间:2000-2019年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区、年份、地方财政印花税 4、范围:31省 5、指标说明:印花税是对特定经济活动和法律行为所征收的…

HTML——什么是块级元素,什么是内联元素,有何区别

在 HTML 中,块级元素(Block-level element)和内联元素(Inline element)是两种不同类型元素,它们在页面布局和样式应用方面有不同的行为和特性。 块级元素(Block-level element) 块级…

优先级与环境变量的艺术:驾驭 Linux 系统的核心

文章目录 前言一、什么是进程优先级?二、Linux 系统中的优先级2.1 查看进程优先级2.2 PRI 和 NI 的关系2.3 修改进程优先级2.4 进程优先级的实现原理2.5 进程的特性 三、环境变量3.1 PATH——搜索可执行文件的目录列表1. 为什么自己写的程序需要加 ./ 才能执行&…

【AVRCP】深度剖析 AVRCP 中 Generic Access Profile 的要求与应用

目录 一、GAP基础架构与核心要求 1.1 GAP在蓝牙体系中的定位 1.2 核心模式定义 二、AVRCP对GAP的增强要求 2.1 模式扩展规范 2.2 空闲模式过程支持 三、安全机制实现细节 3.1 认证与加密流程 3.2 安全模式要求 四、设备发现与连接建立 4.1 发现过程状态机 4.2 连接…

聊聊如何保障自动化测试的稳定性

目录 一、环境隔离与控制 二、 测试用例设计原则 三、处理异步和动态内容 四、依赖管理 五、错误处理与日志 六、持续集成(CI)与自动化流程 七 、监控与维护 八、团队协作与文化 在我们进行自动化测试的时候,可能会遇到一些测试环境不…

【AI学习笔记】Coze平台实现将Excel文档批量导入数据库全过程

背景前摇&原视频教程: 最近看到很多同学都在用Coze平台操作数据,我也想了解一下工作流的搭建和数据处理过程,但是一下子又看不懂太复杂的逻辑,于是上B站搜索相关的基础教程。 Coze官方教程: 之前有看过Coze平台…

《可爱风格 2048 游戏项目:HTML 实现全解析》

一、引言 在如今的数字化时代,小游戏以其简单易上手、趣味性强的特点深受大家喜爱。2048 游戏作为一款经典的数字合并游戏,拥有庞大的玩家群体。本文将详细介绍一个用单文件 HTML 实现的可爱风格 2048 游戏项目,它不仅具备传统 2048 游戏的基…

HR人员和组织信息同步AD域服务器实战方法JAVA

HR人员和组织信息同步AD域服务器 前期准备AD域基础知识整理HR同步AD的逻辑代码结构配置文件设置启动类HR组织的BeanHR人员Bean获取HR人员和组织信息的类AD中处理组织和人员的类日志配置 POM.xml文件生成EXE文件服务器定时任务异常问题注意事项 前期准备 1、开发语言&#xff1…

java项目之基于ssm的毕业论文管理系统(源码+文档)

项目简介 毕业论文管理系统实现了以下功能: 本毕业论文管理系统主要实现的功能模块包括学生模块、导师模块和管理员模块三大部分,具体功能分析如下: (1)导师功能模块:导师注册登录后主要功能模块包括个人…

4小时速通shell外加100例

🔥 Shell 基础——从入门到精通 🚀 🌱 第一章:Shell,简单说! 👶 什么是Shell?它到底能做什么?这章让你快速了解Shell的强大之处! 👶 什么是Shell…

文字变央视级语音转换工具

大家在制作短视频、广告宣传、有声读物、自媒体配音、学习辅助等场景的时候,经常会需要用到配音来增强视频的表现力和吸引力。然而,市面上的一些配音软件往往需要收费,这对于很多初学者或者预算有限的朋友来说,无疑增加了一定的负…

日志2333

Pss-9 这一关考察的是时间盲注 先练习几个常见命令语句&#xff1a; select sleep(5);--延迟5s输出结果 if &#xff08;1>0,ture,false&#xff09;;--输出‘ture’ /if &#xff08;1<0,ture,false&#xff09;;--输出‘false’ select ascii()/select ord()返回字…

美国国家数据浮标中心(NDBC)

No.大剑师精品GIS教程推荐0地图渲染基础- 【WebGL 教程】 - 【Canvas 教程】 - 【SVG 教程】 1Openlayers 【入门教程】 - 【源代码示例 300】 2Leaflet 【入门教程】 - 【源代码图文示例 150】 3MapboxGL【入门教程】 - 【源代码图文示例150】 4Cesium 【入门教程】…

【计算机网络】网络简介

文章目录 1. 局域网与广域网1.1 局域网1.2 广域网 2. 路由器和交换机3. 五元组3.1 IP和端口3.2 协议3.3 协议分层 4. OSI七层网络协议5. TCP/IP五层模型5.1 TCP/IP模型介绍5.2 网络设备所在分层 6. 封装与分用6.1 数据包的称谓6.2 封装6.3 分用 1. 局域网与广域网 1.1 局域网 …