单例模式(四)

 我来答
舒适还明净的海鸥i
2022-08-23 · TA获得超过1.7万个赞
知道小有建树答主
回答量:380
采纳率:0%
帮助的人:70.6万
展开全部

本篇主要介绍几种常用的写法,还是以Java语言为例,其中会涉及到Java语言的特性,如果用其他语言来写单例模式,主要还是抓住单例的全局唯一性原则去考虑即可。如果想看往期单例模式的,可以从这些链接进入:

单例模式(一)

单例模式(二)

单例模式(三)

关于单例模式,其实网上也早有流传一种叫法,分别是懒汉模式和饿汉模式,所谓懒汉模式即懒加载,也就是等到用的时候再去创建单例对象,而饿汉模式即立即创建单例对象,下面来介绍几种常用的几种单例写法:包括2种懒汉模式 + 2种饿汉模式:

第一种:饿汉模式

在 Singleton 类初始化的时候就创建了单例对象singleton,这也是饿汉模式的命名的原因;这种模式在单例模式(一)的时候我们也分析过。

第二种:懒汉模式

这种模式就是在用的时候,才创建单例对象,关于两次的校验 if (singleton == null )和 synchronized 主要是起到了多线程安全和优化性能的作用,在单例模式(二)和 单例模式(三)中也仔细分析过。

第三种:懒汉模式 ,运用java内部类的写法

这种写法其实跟语言特性有关,内部类也是java中一种特性写法,不一定每种语言都有,所以当用其他语言来写的时候,要注意语言特性问题。

这种写法,就是在 Singleton 类中加了一个 SingletonHolder 类,这就是内部类,所谓的内部类,就是一个大类中还有一个小类,只有当调用到 getInstance 方法的时候,才会去加载 SingletonHolder 这个类( Java类加载原理 ,后面会专门有篇章介绍类加载),这样就能满足调用时再创建对象的条件了,另外由于类加载是线程安全的,所以这里也不会有多线程竞争条件存在,也符合了全局唯一性原则。

第四种:饿汉模式 ,运用java 枚举类enum的写法

枚举enum也是java语言的一个特性,跟上面的内部类一样,具体选择语言的时候,还是要根据语言特性去选择。

这种方式也是单例模式的最简写法,也是《Effective Java》作者Josh Bloch推荐的写法,既能保证多线程安全,也能保证单例对象全局唯一性。

其实写到这里似乎意犹未尽,时间不多,今天就先列举单例模式常用的4种写法,下一篇会继续介绍一些遗留的问题,比如:

等等问题,会在下一篇继续讨论,如果有其他没有涵盖到的问题或者疑问,也欢迎读者一起提问讨论。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
博阳精讯
2024-07-25 广告
上海博阳精讯信息科技有限公司 (简称博阳精讯) 是国内专业的 EBPM 咨询服务机构。EBPM 是 “基于要素的流程管理” (Element-Based Process Management ) 的英文首字缩写。博阳精讯的 EBPM 流程管... 点击进入详情页
本回答由博阳精讯提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式