位置: IT常识 - 正文

设计模式——单例模式(《设计模式》)

编辑:rootadmin
设计模式——单例模式 是什么?

推荐整理分享设计模式——单例模式(《设计模式》),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:《设计模式》,设计模式 单一原则,设计模式?,设计模式 单一原则,设计模式其实很简单,设计模式简单理解,设计模式单例,设计模式 单一原则,内容如对您有帮助,希望把文章链接给更多的朋友!

单例模式是Java中最简单的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式;

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建,这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象;

结构

单例模式主要有以下角色:

1.单例类:只能创建一个实例的类;

设计模式——单例模式(《设计模式》)

2.访问类:使用单例类;

实现饿汉式

类加载就会导致该单实例对象被创建;

代码实现

我们在类加载的时候就会实例化出该对象存放在内存中,不需要在使用的时候再去创建,因此不会有多个Singleton对象实例存在,当类被卸载时,该对象也会随之消亡;

public class HungrySingleton { /** * 模拟饿汉式创建单例对象 * */ private final static HungrySingleton hungrySingleton=new HungrySingleton(); public static HungrySingleton getInstance(){ return hungrySingleton; }}懒汉式

类加载不会导致该单实例对象被创建,而是首次使用该对象的时候才会创建;

代码实现

我们直接来看最终的代码,我们不仅要在使用的时候进行单例对象的实例化,还需要防止在并发的情况下重复创建;

因此我们最终使用的方案是双重判空+锁的方式来处理,这样处理的好处就在于:如果在并发的情况下,首先回去进行非空判断,不至于让所有线程一上来就直接竞争锁资源,提高了性能,其次又为了防止在加到锁之后其他线程已经完成了实例化,因此再进行判断,这样的话更加安全和保险;

/** * 模拟懒汉式创建单例对象 * */private static volatile Singleton singleton; //防止指令重排public static Singleton getInstance() { if (singleton==null){ synchronized (Singleton.class){ //加锁防止并发的情况下重复实例化对象 if (singleton!=null){ //双重判空 return singleton; }else { singleton=new Singleton(); } } } return singleton;}

对单例对象加上volatile关键字是为了防止指令重排序,因为JVM在保证最终结果正确的情况下,可以不按照程序编码的顺序执行语句,尽可能提高程序的性能,但是这样的话就有可能报空指针异常,因此我们使用volatile修饰,可以保证其指令执行的顺序与程序指明的顺序一致,不会发生顺序变化,其次使用volatile关键字修饰的变量可以保证其内存可见性,即每一时刻读取到该变量的值都是内存中最新的那个纸,线程每次操作该变量都需要读取该变量;

如下图,如果线程A发生了指令重排,没有在第二步的时候进行对象的初始化,而这个时候线程B刚好在这个时间差去使用该对象就会报NPE异常;

本文链接地址:https://www.jiuchutong.com/zhishi/299317.html 转载请保留说明!

上一篇:第十章 STM32+ESP8266接入机智云 实现小型IOT智能家居项目(第十章光结局和夜结局)

下一篇:【Node.js实战】一文带你开发博客项目之联调(导入HTML、Nginx反向代理、CORS解决跨域、与前端联调)(node.js教程详细)

  • 企查查企业信息查询公司工商年报

    企查查企业信息查询公司工商年报

  • 上海养老院口碑排名费用一个月多少

    上海养老院口碑排名费用一个月多少

  • 华为p50pro怎么设置指纹解锁(华为p50pro怎么设置24小时)

    华为p50pro怎么设置指纹解锁(华为p50pro怎么设置24小时)

  • 苹果13色彩滤镜在哪里(苹果14色彩滤镜怎么调)

    苹果13色彩滤镜在哪里(苹果14色彩滤镜怎么调)

  • 北京健康宝怎么查询个人轨迹(北京健康宝怎么改成通勤人员)

    北京健康宝怎么查询个人轨迹(北京健康宝怎么改成通勤人员)

  • 苹果手机怎么设置阻止陌生来电(苹果手机怎么设置来电闪光灯闪烁)

    苹果手机怎么设置阻止陌生来电(苹果手机怎么设置来电闪光灯闪烁)

  • 微信如何设置面部登录(微信如何设置面容解锁)

    微信如何设置面部登录(微信如何设置面容解锁)

  • 金立手机卡顿怎么处理(金立手机卡顿怎么回事)

    金立手机卡顿怎么处理(金立手机卡顿怎么回事)

  • surface死机无法关机怎么办(surface 死机)

    surface死机无法关机怎么办(surface 死机)

  • qq收藏保存多长时间(qq收藏保存多长时间最好)

    qq收藏保存多长时间(qq收藏保存多长时间最好)

  • 把qq空间注销情侣空间还在不(qq空间注销后有什么后果)

    把qq空间注销情侣空间还在不(qq空间注销后有什么后果)

  • 固态加机械影响速度吗(固态加机械影响散热吗)

    固态加机械影响速度吗(固态加机械影响散热吗)

  • 公众号维护费用标准(公众号维护一个月需要多少钱)

    公众号维护费用标准(公众号维护一个月需要多少钱)

  • 为什么充电线用着用着松了(为什么充电线用着用着就不能用了)

    为什么充电线用着用着松了(为什么充电线用着用着就不能用了)

  • 怎么看网卡驱动是否正常(怎么看网卡驱动型号)

    怎么看网卡驱动是否正常(怎么看网卡驱动型号)

  • 苹果手机的白点从哪里设置(苹果手机的白点怎么取消)

    苹果手机的白点从哪里设置(苹果手机的白点怎么取消)

  • 华为单手操作怎么打开(华为单手操作怎么点上面的按键)

    华为单手操作怎么打开(华为单手操作怎么点上面的按键)

  • 微博私信删除对方能看到吗(微博私信删除对话后对方能看到吗)

    微博私信删除对方能看到吗(微博私信删除对话后对方能看到吗)

  • 微信现在能加多少好友(微信现在能加多少人)

    微信现在能加多少好友(微信现在能加多少人)

  • 有哪些打车软件平台(微信有哪些打车软件)

    有哪些打车软件平台(微信有哪些打车软件)

  • 苹果短信铃声叮的一声(苹果短信铃声叮咚音频下载)

    苹果短信铃声叮的一声(苹果短信铃声叮咚音频下载)

  • pr怎么把竖屏变成横屏(pr怎么把竖屏变成伪横屏)

    pr怎么把竖屏变成横屏(pr怎么把竖屏变成伪横屏)

  • 手机怎么看历史浏览记录(手机怎么看历史安装的软件)

    手机怎么看历史浏览记录(手机怎么看历史安装的软件)

  • word文档修改不了怎么办(pdf文字怎么修改)

    word文档修改不了怎么办(pdf文字怎么修改)

  • xr有nfc功能吗(苹果xr如何设置nfc门禁卡)

    xr有nfc功能吗(苹果xr如何设置nfc门禁卡)

  • qq提示音怎么设置(qq提示音怎么设置全部人)

    qq提示音怎么设置(qq提示音怎么设置全部人)

  • 富士山和双岩,日本松崎 (© Tommy Tsutsui/Getty Images)(富士山的岩石属于什么岩)

    富士山和双岩,日本松崎 (© Tommy Tsutsui/Getty Images)(富士山的岩石属于什么岩)

  • python文件的三大访问方式(python文件可分为哪几类)

    python文件的三大访问方式(python文件可分为哪几类)

  • 利润表里面的所得税
  • 一般纳税人开具的普票可以抵扣吗
  • 计提本月增值税会计科目
  • 公司的资本公积金可以用于弥补公司的亏损
  • 计入税金及附加的科目
  • 春节补贴是加还是减
  • 实习生个人所得税需要申报吗
  • 个税年度汇算清缴截止时间
  • 成本结转的方法能用百分比法吗
  • 购买电商平台
  • 未开票收入的会计怎么做
  • 补缴企业所得税的计算公式
  • 固定资产替换公式
  • 个体工商户销售自己使用过的物品
  • 因保管不善,不慎遗失
  • 现金支票提取现金备用
  • 不良产品出库维护制度
  • 顾客让抹零头应对话术
  • 出纳去银行
  • 企业合并以外
  • 非独立核算的分公司怎么做账
  • 企业购买救生棒合法吗
  • 工资薪金所得的个人所得税筹划方法
  • 公司必须购买税控设备吗
  • 企业汽油费会计分录
  • 对公账户上扣缴的税怎么做分录?
  • 企业的其他业务收入有
  • 每季度财务报表
  • 吸收合并企业的情形
  • 返利冲减收入
  • 外贸收汇怎么处理
  • word2013压缩图片
  • 公账提取备用金限额
  • php获取useragent
  • MAC OS X Yosemite开启深色模式的方法
  • php rewind
  • 公司转让债务债权协议
  • 外币存款业务
  • 邮电通信企业业务收入包括哪些内容?
  • 逻辑回归模型
  • 大学生问卷spss数据分析作业
  • 合伙企业能享受所得税减半征收
  • 哪些项目可以在城镇开发边界外
  • python字符串方法总结
  • 经营活动现金流量比率
  • 小规模企业所得税怎么征收
  • 科目余额表该怎么填
  • 支付土地补偿款计入什么科目
  • 收货和入库的区别
  • 收据可以入账报销吗
  • 纳税申报怎么做
  • 城建税和教育附加税怎么算
  • 安防工程注意事项有哪些
  • 什么是受托支付和非受托支付
  • 缴纳的增值税怎么做账
  • 房产契税一般什么时间交
  • 年金现值和年金终值的例题
  • 担保费能否抵扣增值税
  • 可以抵扣进项税的项目包括
  • sql语句 时间
  • sql游标实例
  • 清华同方笔记本无线网络开关在哪
  • windows自带的碎片整理程序
  • runservice.exe - runservice是什么进程 有什么用
  • newsupd.exe - newsupd是什么进程 有什么用
  • win7屏幕刷新率怎么调高
  • js函数的作用
  • node文件目录
  • 开手游游戏
  • linux 常用命令大全及其详解
  • linux执行多个脚本
  • python opencv
  • 游戏开发吧
  • css div内容自动换行
  • python 内置函数名作为变量名
  • python函数经典例程
  • js金额加减
  • 安卓 自动化app
  • 上海网上申报软件怎样下载
  • 江苏国税局官网登录
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设