【Java】单例模式

单例模式

  • 设计模式概述
  • 单例模式
    • 实现思路
      • 饿汉式
      • 懒汉式
      • 饿汉式 vs 懒汉式

设计模式概述

设计模式是在大量的实践中总结理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模式免去我们自己再思考和摸索。就像是经典的棋谱,不同的棋局,我们用不同的棋谱。“套路”

经典的设计模式共有23种。每个设计模式均是特定环境下特定问题的处理方法。
在这里插入图片描述

单例模式

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

实现思路

  1. 如果我们要让类在以恶个虚拟机中只能创建一个对象,我们必须将构造器的访问权限设置为private ,这样我们就不能在类外部用new来创建对象的实例,但是在类内仍然可以创建该对象的实例
  2. 因为我们的构造方法是private修饰的,所以我们在类的外部开始无法得到类的对象,只能调用该类的某个静态方法来通过返回值的方式来取得对象**,静态方法中只能访问类中的静态成员变量,所以,指向类内部产生的该类对象也必须定义成静态的.**

饿汉式

public class singleInstanceTest {
    //类内部提供一个该类的实例
    private static singleInstanceTest instanceTest = new singleInstanceTest();
    //定义private修饰的构造器
    private singleInstanceTest() {

    }
    //提供静态的get方法获取实例
    public static singleInstanceTest getInstance() {
        return instanceTest;
    }
}

懒汉式

public class singleInstanceTest2 {
    //创建时不实例化
    private static singleInstanceTest2 single = null;

    //私有化构造器
    private singleInstanceTest2(){

    }
    //公共的get方法来获取实例
    public static singleInstanceTest2 getInstance(){
        //如果没有创建过实例则创建实例
        if(single == null){
            single = new singleInstanceTest2();
        }
        return single;
    }
}

饿汉式 vs 懒汉式

饿汉式

  1. 特点: 立即加载,类在使用时就已经将对象创建完毕
  2. 优点: 实现简单 没有线程安全问题
  3. 缺点: 类被加载时会直接初始化static的实例,静态变量被创建并分配空间,从此以后,这这个static的实例便一直占用这一块内存,知道类被卸载时,静态变量才会被销毁,并且释放占用的内存,因此在特定情况下会`耗费内存

懒汉式

  1. 特点: `延迟加载``,在调用静态方法时实例才会被创建
  2. 优点: 实现起来比较简单;当类被加载的时候,static的实例未被创建并分配内存空间,当静态方法第一次被调用时,初始化实例变量,并分配内存,因此在某些特定条件下会节约内存
  3. 在多线程环境中,这种实现方法是完全错误的,线程不安全,根本不能保证单例的唯一性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【unity之IMGUI实践】单例模式管理面板对象【一】

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

electron globalShortcut 快捷键与系统全局快捷键冲突

用 electron 开发自己的接口测试工具(Post Tools),在设置了 globalShortcut 快捷键后,发现应用中的快捷键与系统全局快捷键冲突了,导致系统快捷键不可正常使用。 快捷键配置 export function initGlobalShortcut(main…

【宝塔】宝塔部署ThinkPHP项目

最近搞了个培训教育的小程序,后端服务用的是ThinkPHP。使用的过程中,发现对于这种小项目用php还是很不错的选择,开发便捷,轻量级。宝塔神器也是很不错的,值得推荐使用。 下面介绍一下项目中用宝塔部署ThinkPHP项目&…

【菜鸟の笔记_利用Excel自动总结表格数据_自动链接word文本】

自动更新总结表格数据 1. 撰写原因2. 解决的问题3. Excel自动总结表格数据内容(一段话)。3.1问题引出3.2解决方式 4.Excel数据、总结内容,自动链接更新Word文本 1. 撰写原因 【GPT的答案】利用Excel自动总结表格数据有以下好处: …

redis浅析

一 什么是NoSQL? Nosql not only sql(不仅仅是SQL) 关系型数据库:列行,同一个表下数据的结构是一样的。 非关系型数据库:数据存储没有固定的格式,并且可以进行横向扩展。 NoSQL泛指非关系…

RocketMQ 为何性能高

本文主要从性能角度考虑 RocketMQ 的实现。 整体架构 这是网络上流行的 RocketMQ 的集群部署图。 RocketMQ 主要由 Broker、NameServer、Producer 和 Consumer 组成的一个集群。 **NameServer:整个集群的注册中心和配置中心,管理集群的元数据。包括 T…

解析Android VNDK/VSDK Snapshot编译框架

1.背景 背景一: 为解决Android版本碎片化问题,引入Treble架构,它提供了稳定的新SoC供应商接口,引入HAL 接口定义语言(HIDL/Stable AIDL,技术栈依然是Binder),它指定了 vendor HAL 和system fr…

容器化背后的魔法之Docker底层逻辑解密

Docker内部工作原理是怎样的? 现在我们知道了Docker是什么以及它提供了哪些好处,让我们逐个重要的细节来了解。 什么是容器?它们是如何工作的? 在深入研究Docker的内部机制之前,我们首先要了解容器的概念。简单地说…

从2023中国峰会,看亚马逊云科技的生成式AI战略

“生成式AI的发展就像一场马拉松比赛,当比赛刚刚开始时,如果只跑了三四步就断言某某会赢得这场比赛,显然是不合理的。我们现在还处于非常早期的阶段。” 近日,在2023亚马逊云科技中国峰会上,亚马逊云科技全球产品副总裁…

JSX的基础使用

1. JSX嵌入变量作为子元素的使用 ①当变量是Number、String、Array类型时,可以直接显示; ②当变量是null、undefined、Boolean类型时,内容为空; 若想要展示nul、undefined、Boolean类型,转字符串;转换方式…

增强型视觉系统 (EVS)

增强型视觉系统 EVS 1、增强型视觉系统概览2、车载相机 HAL2.1 EVS 应用2.2 EVS 管理器2.3 EVS HIDL 接口2.4 内核驱动程序 《增强型视觉系统 (EVS) 1.1 集成指南》 车载相机 HAL 1、增强型视觉系统概览 为了增强视频串流管理和错误处理,Android 11 更新了车载相机…

图像处理之图像灰度化

图像灰度化 将彩色图像转化成为灰度图像的过程成为图像的灰度化处理。彩色图像中的每个像素的颜色有R、G、B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多万 (255255255)的颜色的变化范用。而灰度图像是R、G、B三个分量相同的一种特…

纯css3实现小鸡从鸡蛋破壳而出动画特效

实现一个使用纯css3实现小鸡破壳的效果 示例效果如下所示 示例代码 <template><div><div class"eggWrapper"><div class"chickHead"><div class"eyeDiv"></div><div class"eyeDiv"></di…

vue3+mapboxgl鼠标浮动显示cgcs2000

一、需求 鼠标在地图中浮动展示地图的经纬度&#xff0c;cgcs2000 xy 还有显示带号 二、实现效果 展示经度&#xff0c;纬度&#xff0c;x值&#xff0c;y值显示的是带号和y值 三、思路 3.1、mapbox获取经纬度方法 初始化地图后.on方法中有个mousemove方法 mapboxUtil._m…

故障排错篇之OSPF协议

一、OSPF邻居建立不成功 1、从理论上判断问题的所在 1.1、检查邻居两端的接口物理和协议状态是否UP&#xff0c;状态是否稳定&#xff0c;接口是否有丢包&#xff0c;两边互ping大包是否能通 若物理接口不Up或是不稳定&#xff08;有振荡现象&#xff09;&#xff0c;请排查…

lvs使用

1.前言 LVS&#xff08;Linux Virtual Server&#xff09;是一个基于 Linux 内核的负载均衡器&#xff0c;用于分发网络流量和将请求转发给后端服务器。LVS 提供了多种负载均衡算法和转发模式&#xff0c;以满足不同场景和需求的负载均衡需求&#xff0c;在LVS中定义虚拟服务的…

2023- itwangyang - mac mysql 终端启动命令

在mac上使用mysql终端进行操作时&#xff0c;需要先启动mysql服务。以下是启动mysql服务的命令&#xff1a; sudo /usr/local/mysql/support-files/mysql.server start执行该命令后&#xff0c;会出现一些提示信息&#xff0c;等待一段时间后mysql服务就启动成功了。 接下来&…

SSM框架最新整合保姆级教程(IDEA版)

SSM框架最新整合保姆级教程(IDEA版) 一、环境要求 ​ 环境&#xff1a; IDEAMySQL 5.7.19Tomcat 9Maven 3.6 要求&#xff1a; 需要熟练掌握MySQL数据库&#xff0c;Spring&#xff0c;JavaWeb及MyBatis知识&#xff0c;简单的前端知识&#xff1b; 完整代码&#xff1a;…

通信算法之177: 基于Matlab的OFDM通信系统关键基带算法设计7-流程

一. 接收算法流程 1.1 粗同步&#xff08;分组检测&#xff09; 1.2 载波同步&#xff08;精细频偏估计&#xff09; 多普勒频偏和晶振。频率偏差&#xff0c;会破坏子载波间的正交性&#xff0c;且这种频差对相位的影响还具有累加性。 1.3 精同步&#xff08;OFDM起始&…

【Spring Cloud系列】Hystrix应用详解

【Spring Cloud系列】Hystrix应用详解 文章目录 【Spring Cloud系列】Hystrix应用详解一、概述二、什么是Hystix三、Hystrix作用四、Hystrix设计原则五、Hystrix实现原理5.1 隔离5.2 熔断5.3 降级服务降级主要用于什么场景呢实现服务降级需要考虑几个问题降级分类 5.4 缓存请求…
最新文章