激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Android - Kotlin中單例常用的五種寫法

Kotlin中單例常用的五種寫法

2022-03-03 14:36土逗牛肉 Android

這篇文章主要給大家介紹了關于Kotlin中單例常用的五種寫法,文中通過示例代碼介紹的非常詳細,對大家的學習合作工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

單例模式是寫代碼過程中不可避免用到的,下面我總結一下單例常用的五種寫法,話不多說了,來一起看看詳細的介紹吧

加載類時創建單例

Java實現

?
1
2
3
4
5
6
7
8
9
public class Config{
 private static Config INSTANCE=new Config();
 private Config(){
 //構造函數
 }
 public static Config getInstance(){
 return INSTANCE;
 }
}

Kotlin實現

?
1
object Config{}

上面這種寫法簡單粗暴,直接在加載類的時候創建,但這樣會拖慢啟動進程,因此,可以在用到的時候再加載,比如下面這種寫法

懶加載寫法

Java實現

?
1
2
3
4
5
6
7
8
9
10
11
12
public class Config{
 private static Config INSTANCE;
 private Config(){
 //構造函數
 }
 public static Config getInstance(){
 if(null==INSTANCE){
 INSTSANCE=new Config();
 }
 return INSTANCE;
 }
}

Kotlin實現

?
1
2
3
4
5
6
7
public class Config{
 companion object{
 val instance by lazy(LazyThreadSafetyMode.NONE){
  Config()
 }
 }
}

懶加載雖然避免在加載類的時候創建,但是線程不安全,如果同時多個類獲取單例,有可能會創建多個單例,因此可以在創建單例的時候加線程鎖,比如下面這種寫法:

同步鎖寫法

Java實現

?
1
2
3
4
5
6
7
8
9
10
11
12
public class Config{
 private static Config INSTANCE;
 private Config(){
 //構造函數
 }
 public static synchronized Config getInstance(){
 if(null==INSTANCE){
  INSTANCE=new Config();
 }
 return INSTANCE;
 }
}

Kotlin實現

?
1
2
3
4
5
6
7
8
9
10
class Config{
 companion object{
 private var instance:Config?=null
 @Synchronized
 fun get():Config{
  if(nnull==instance) instance=Config()
  return instance
 }
 }
}

同步鎖避免單例不會被重復創建,但是同步鎖

雙重校驗寫法

Java實現

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Config{
 private static volatile Config INSTANCE;
 private Config(){
 //構造函數
 }
 public static Config getInstance(){
 if(null==INSTANCE){
  synchronized(Config.class){
  if(null==INSTANCE){
   INSTSANCE=new Config();
  }
  }
 }
 return INSTANCE;
 }
}

Kotlin實現

?
1
2
3
4
5
6
7
class Config{
 companion object{
 val instance by lazy(LazyThreadSafetyMode.SYNCHRONIZED){
  Config()
 }
 }
}

靜態內部類寫法

這種寫法避免了類加載的時候初始化單例,同時將同步鎖問題交給虛擬機處理,算得上是最優雅的寫法,Java和Kotlin寫法幾乎是一模一樣

Java實現

?
1
2
3
4
5
6
7
8
9
10
11
public class Config{
 private static class Helper{
 private static Config INSTANCE=new Config();
 }
 private Config(){
 //構造函數
 }
 public static Config getInstance(){
 return Helper.INSTANCE;
 }
}

Kotlin實現

?
1
2
3
4
5
6
7
8
class Config private constructor(){
 companion object{
 fun getInstance = Helper.instance
 }
 private object Helper{
 val instance = Config()
 }
}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:https://www.jianshu.com/p/6dde590d253d

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人免费一区二区三区 | 色综合久久久久久久久久久 | 欧美一区二区黄色片 | 女人解衣喂奶电影 | www.成人免费视频 | 91九色福利 | 91免费在线播放 | 欧美一级黄色免费 | 久久久久九九九女人毛片 | 国产亚洲福利 | 精品久久久久久久久久久αⅴ | 手机在线看片国产 | 国产一区二区三区视频在线观看 | 国产精品91久久久 | 涩涩激情网 | 中文区中文字幕免费看 | 午夜偷拍视频 | bt 自拍 另类 综合 欧美 | 国产高潮失禁喷水爽到抽搐视频 | 久久免费综合视频 | 一级做a爱片毛片免费 | 成人h精品动漫一区二区三区 | 欧美成人免费一级 | 天天艹综合 | 国产69久久精品成人看 | 国产妇女乱码一区二区三区 | 蜜桃av鲁一鲁一鲁一鲁 | 国产在线精品一区二区三区不卡 | 国产精品一品二区三区四区18 | 香蕉国产在线视频 | 深夜福利视频绿巨人视频在线观看 | 欧美精品久久久久久久久久 | 中文字幕精品一二三四五六七八 | 成人毛片免费看 | 亚洲啊v在线观看 | 中文字幕亚洲情99在线 | 黄色电影免费网址 | 老师你怎么会在这第2季出现 | 免费看性xxx高清视频自由 | 欧美精品一区二区视频 | 免费香蕉成视频成人网 |