多个if用什么设计模式_抽丝剥茧——单例设计模式

57fa1f2114235c06003a201ea6e05338.png

单例设计模式

兄弟们好,今天是最后一个设计模式了,也是我们最熟悉的单例设计模式,可以说这个设计模式是我们最先接触到的设计模式了。想当年学习JavaSE的时候,老师聊到一个「饿汉式和懒汉式」,我还纠结了半天,这名字起的很完美。接下来我们一起复习一下单例设计模式吧。

定义:该类的实例仅仅存在一个。单个实例对象——单例模式

我们直接上代码

1. 懒汉式

public class Single {private static final SingleDesgin singleDesgin = new SingleDesgin();private Single(){}public SingleDesgin newInstance(){return singleDesgin ;}
}
  • 直接在类加载的时候创建对象,由虚拟机保证该对象仅仅被创建一次。(「推荐使用」

2. 懒汉式

public class Single {private SingleDesgin singleDesgin ;private Single(){}public SingleDesgin newInstance(){if(singleDesgin == null){singleDesgin = new SingleDesgin();}return singleDesgin ;}
}
  • 在多线程情况下可能会出现多个对象被常见,线程不安全。(「不推荐使用」

3. 静态内部类

public class Single {private Single(){}public SingleDesgin newInstance(){return SingleBuild.singleDesgin;}private static class SingleBuild{static SingleDesgin singleDesgin = new SingleDesgin();}}
  • 和懒汉式相同,由虚拟机保证对象线程安全。与之不同的是把类加载时机交给了开发者(「调用方法的时候」

4. DCL单例

public class Single {private volatile SingleDesgin singleDesgin ;public SingleDesgin newInstance(){if(singleDesgin == null){synchronized (Single.class){if(singleDesgin == null){singleDesgin = new SingleDesgin();}}}return singleDesgin ;}}
  • 双重加锁,保证多线程安全,通过volatile保证线程可见性和有序性。

关于volatile关键字可以参考我之前的文章,不过过几天我会发一篇完整讲述JMM模型的文章,其中讲到了volatile,可以「关注一波公众号」。(打个广告,哈哈哈)

5. 枚举实现

public enum Single {INSTANCE
}
  • 就这,就这。这个操作来自于Java创始人的写法,牛批
  • 优点:线程安全,肯定加载一次;防止序列化
  • 缺点:将一个类搞成了枚举,不容易区分

好啦,以上就是所有我认为比较典型的单例设计模式的类型了,至于说什么八种设计模式的写法,无非也就是加一个静态代码块等等操作,将一个操作分两步执行了,没什么新鲜的,上面五种比较典型,兄弟们可以尽情享用。设计模式要结束了。明天或者后天会发一篇文章做一个总结,并且计划一下接下来要做的事情,明天晚上团建,看晚上回来的时间吧。

好啦,兄弟们晚安呐。明天又是元气满满的一天呢。

58532173e2bdb124d845dc151a6e0b1a.png

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

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

相关文章

volatile的适用场合

1对变量的写入操作不依赖其当前值 不满足&#xff1a;number/count count*5等 满足Boolean变量、记录温度变化的变量等 2.该变量没有包含在具有其他变量的不变式中 不满足&#xff1a;不变式low<up 转载于:https://www.cnblogs.com/CCCrunner/p/6444550.html

计算机密码行业专题研究:网络安全最大弹性领域

来源&#xff1a;未来智库报告摘要&#xff1a;1、传统市场:政策驱动&#xff0c;预计传统密码增长中枢提升至30%密码是网络安全刚需&#xff0c;密码法2020年1月1日实施。政策驱动客户下沉&#xff0c;行业中期增速从10%提升至30%。2、新兴市场:物联网安全的基石&#xff0c;未…

python3.7和2.7_为两个python版本(2.7和3.7)Windows 10安装pip

Eylo堆垛机我已经在python3.7中成功地安装了pip&#xff0c;但是似乎无法为python2.7安装它。在我尝试过通过下载get来实现这一点-点对点并在安装它的目录中运行cmd按住Shift键&#xff0c;然后单击“打开命令窗口”python get-pip.py然后继续更新pip。。。它提供了这个Collect…

人工智能军事对抗技术发展趋势

来源&#xff1a;战略前沿技术人工智能军事对抗技术人工智能&#xff08;AI&#xff09;作为新一代科技革命的典型代表性技术&#xff0c;目前已在世界各国的工业、金融、娱乐和公共安全等领域广泛应用&#xff0c;而其在军事领域的应用也正在快速发展。随着人工智能技术与军事…

java语言计算器怎么写_求助,一个计算器的括号功能怎么写啊。

求助&#xff0c;一个计算器的括号功能怎么写啊。import javax.swing.*;import javax.swing.event.*;import java.awt.*;import java.awt.event.*;public class computer1 extends JFrame implements ActionListener{Double r1,r2,total,c1,c2;int i,j,j110,j27,c;JButton[] Bu…

mysql递归层次查询

mysql递归层次查询 最近在做一个从oracle数据库到mysql数据库的移植&#xff0c;遇到一个这样的问题 在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点。但shi&#xff0c;在MySQL的目前版本中还没有对应的函…

windows打开的winform当前焦点 是否是hwnd_推介几款 windows 下非常好用的工具

在下工具控一枚&#xff0c;平时会留意收集各种各样给我们生活生产带来便捷的工具&#xff0c;毕竟人生苦短&#xff1b;下面主要介绍一些我在 Windows 系统上发现的一些好用的工具&#xff0c;并且会一笔带过主要优点特点&#xff0c;具体详细用法可以搜一下&#xff0c;相关帖…

借力5G,云VR将推动VR产业迎“第二春”

来源&#xff1a;VR每日必看在近期举办的第八届全球物联网峰会上&#xff0c;作为中国电信5G商用产品的集约运营单位&#xff0c;号百控股在会展区域设置了天翼云VR产品专区&#xff0c;演示了韩国LG U独家授权内容&#xff0c;以及自制VR视频&#xff0c;引入关注。VR云化将实…

java强制删文件夹_java删除文件或文件夹的方法

java删除文件或文件夹的方法java里面删除文件夹时候&#xff0c;如果该文件夹下有内容&#xff0c;即其下包含的有文件或文件夹&#xff0c;当你执行java.io.File.delete(File file)方法时候&#xff0c;不能成功删除&#xff0c;那么如果我们想成功删除&#xff0c;该怎么办的…

python语言设计学习方向_学好Python开发就业方向有哪些?

原标题&#xff1a;学好Python开发就业方向有哪些&#xff1f;近年来&#xff0c;Python市场火爆&#xff0c;从业人员薪资不断增加&#xff0c;选择学Python的人也在逐年增多。然而&#xff0c;很多人学Python只是盲目的跟随潮流&#xff0c;对于Python却不甚了解&#xff0c;…

Linq的优点以及注意事项

转载于:https://www.cnblogs.com/hubbert123/p/6429926.html

低调!中国北斗核心卫星部署完成,开启“全球时代”!超越GPS指日可待

来源&#xff1a;科技杂谈、百度物联网智库 整理发布导 读2019年12月16日15时22分&#xff0c;我国在西昌卫星发射中心用长征三号乙运载火箭&#xff08;及配套远征一号上面级&#xff09;&#xff0c;以“一箭双星”的方式成功将第52、53颗北斗导航卫星发射升空。至此&#x…

mysql 读取文件_关于mysql:逐行读取文件而不将整个文件加载到内存中

我正在使用50 Gb MySQL导出文件&#xff0c;并对其执行脚本操作列表以转换为SQLite3可加载形式(我从这里得到的线索&#xff1a;脚本将mysql dump sql文件转换为可以导入sqlite3的格式D b )。我尚未研究MySQL转储的结构&#xff0c;数据是从第三方获得的。我可以看到它具有创建…

python深浅拷贝 面试_Python面试宝典之基础篇-02

原标题&#xff1a;Python面试宝典之基础篇-02我觉得你如果正在找工作&#xff0c;我的Python面试宝典几期教程&#xff0c;你一定得花时间看完了&#xff01;题目006&#xff1a;说说Python中的浅拷贝和深拷贝。点评&#xff1a;这个题目本身出现的频率非常高&#xff0c;但是…

磁盘挂载基本概念

基本概念PV( 全称 Physical Volume , 物理卷):普通的直接坊问的存储设备&#xff0c;有固定的和可移动的之分&#xff0c;代表性的就是硬盘 VG(全称 Volume Group,卷组):AIX中最大的存储单元&#xff0c;一个卷组由一个或多个PV组成 PP(全称 Physical Partition,物理分区):将PV…

数字孪生白皮书(2019)

▲ 赛迪工业互联网首席研究员袁晓庆博士发布报告来源&#xff1a;赛迪智库以下是白皮书主要内容的PPT&#xff1a;&#xff08;点击放大观看&#xff09;123456789101112131415161718192021222324252627282930未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&…

java手动线程池使用_Java手动配置线程池过程详解

线程池中&#xff0c;常见有涉及到的&#xff1a;ExecutorService executorService Executors.newSingleThreadExecutor();ExecutorService executorService1 Executors.newCachedThreadPool();ExecutorService executorService2 Executors.newFixedThreadPool(3);关于Execu…

BZOJ 1492: [NOI2007]货币兑换Cash [CDQ分治 斜率优化DP]

传送门 题意&#xff1a;不想写... 扔链接就跑 好吧我回来了 首先发现每次兑换一定是全部兑换&#xff0c;因为你兑换说明有利可图&#xff0c;是为了后面的某一天两种卷的汇率差别明显而兑换 那么一定拿全利啊&#xff0c;一定比多天的组合好 $f[i]$表示第$i$天最多能得到的钱…

集水井盖板图集07fj02_【干货】住宅通病详细图集(图文详解)

工序节点1建筑物外墙与散水坡、台阶、明沟留沉降缝图示&#xff1a;要求与做法&#xff1a;1、散水坡、台阶、明沟本身按≤6m长度(总长度均分)留沉降缝。2、外墙阴阳角位按450角留沉降缝。3、散水坡与台阶交接处留沉降缝分隔。工序节点2室外地面 伸缩缝图示&#xff1a;要求与…

最新发布!北京市机器人产业创新发展行动方案(2019-2022) “5432”推动北京机器人产业高质量发展...

来源&#xff1a;机器人大讲堂各有关单位&#xff1a;为贯彻《北京市加快科技创新发展智能装备产业的指导意见》&#xff0c;推动北京市机器人产业高质量发展&#xff0c;现将《北京市机器人产业创新发展行动方案&#xff08;2019—2022年&#xff09;》印发给你们&#xff0c;…