内容简介:详细的双语言(Java与Kotlin)5种单例模式
点击上方 蓝字 关注 公众号
码个蛋第 253 次推文
没有对比就没有伤害
作者:FYNN_JASON
博客:https://www.jianshu.com/u/0438038fe17e
文章目录
-
前言
-
Java与Kotlin对比
-
饿汉式
-
懒汉式
-
同步锁式
-
双重检测式
-
内部类式
-
总结
0
前言
单例模式,一直以来是我们在日常开发中最常用的一种设计模式,更是面试中非常重要,也非常容易被问到的问题。在日常开发中,大家常用的语言还是Java,但今天我给大家带来的是在Kotlin语言中,单例模式是怎么编写的,并且会对比 Java 方式,并说明每种方式的优缺点。
下面会列举5种最为常见的单例模式做对比:
1.饿汉式
2.懒汉式
3.同步锁式
4.双重检测式
5.内部类式
1
Java与Kotlin对比
饿汉式
饿汉式可以说是我们最先接触单例模式的例子了,是最基本的单例写法,也是最快最懒的方式。
下面直接看代码吧:
-
Java方式
-
Kotlin方式
有童鞋要说了,这什么都没写呀。对,饿汉式在Kotlin中,只需要一个object修饰符就行了,这就是Kotlin非常厉害的地方。
懒汉式
针对饿汉式的缺点,于是懒汉式就出现了,因为比较简单,下面直接分析。
-
Java方式
其实就是增加了一个空判断。
-
Kotlin方式
Kotlin这里有两种写法,一种是纯种,一种是变种。变种大家一看就明白,就是直接把Java的方式翻译过来了。纯种的我们使用了lazy,看英文就知道是懒加载的方式,传入了一个LazyThreadSafetyMode.NONE,英文好的小伙伴一看就明白,这是线程不安全的意思。companion object的意思相当于Java中public static。
同步锁式
因为懒汉式的出现,虽然解决了饿汉式的不足,但也出现了多线程的问题。于是解决懒汉式的方式就出现了,那就是我们熟知的加锁Synchronized。
-
Java方式
只是加了一个关键字synchronized,没有难理解的地方。
-
Kotlin方式
在Kotlin中,我们要使用的是注解方式@Synchronized,就能达到同步锁的目的了。
双重检测式
第3种方式应该已经满足日常大部分的需求,但对我们 程序员 来说,不断的优化才是学习之道。那么针对每次获取都会加锁的问题,要怎么解决呢?双重检测式就出现了。
-
Java方式
细心的童鞋发现,我们第二步用到了volatile,关于volatile不是本文的重点,所以这里不展开说明。在第三步中,我们首先判断一次空,如果是空,就加锁,然后再判断一次空,如果为空就创建。这样的好处就是上面优点说到的,只会锁一次。缺点大家也发现了,不仅要必须写volatile,方法中的步骤也不能错。
-
Kotlin方式
又来两种写法,变种的我就不解释了。纯种的,我们只改变了lazy的括号的值,mode = LazyThreadSafetyMode.SYNCHRONIZED就是锁的意思,英文好的童鞋一眼就明白了。
内部类式
最后一种方式,不仅满足了懒加载、线程安全,代码也非常少,是非常推荐的一种方式。
-
Java方式
内部类Holder,里面有外部的实例。很多童鞋可能要问,这怎么就满足懒汉式和线程安全呢?当我们应用初始化时,getInstance没有被调用,就没有实例对象,那就满足了懒汉式。当我们调用getInstance的时候,Java虚拟机为了保证类加载的安全性,所以这里就保证了线程安全。这种写法是不是惊呆了?那Kotlin又是怎么样写的呢?
-
Kotlin方式
很简单,内部用object创建一个内部Holder单例,外部一个getInstance来获取的方法。也相当于是Java翻译过来的方式。
2
总结
为了方便大家,我创建了一个项目,专门供大家对比学习。
这是Github项目,里面有详细的代码注释。如果对你有帮助,欢迎大家star,谢谢!
https://github.com/FynnJason/FiveSingletonDemo
以上所述就是小编给大家介绍的《详细的双语言(Java与Kotlin)5种单例模式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- public 和私有类字段[双语]
- React 16.x 蓝图[双语版]
- 重磅 | CS 294 2018 今日开课!双语字幕独家上线!
- 谷歌双语助理来了!中英夹杂也不怕,递归神经网络和随机森林显神威
- 代码也能预训练,微软&哈工大最新提出 CodeBERT 模型,支持自然-编程双语处理
- 用koa开发一套内容管理系统(CMS),支持javascript和typescript双语言
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Building Websites with Joomla!
H Graf / Packt Publishing / 2006-01-20 / USD 44.99
This book is a fast paced tutorial to creating a website using Joomla!. If you've never used Joomla!, or even any web content management system before, then this book will walk you through each step i......一起来看看 《Building Websites with Joomla!》 这本书的介绍吧!
RGB HSV 转换
RGB HSV 互转工具
HSV CMYK 转换工具
HSV CMYK互换工具