国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 草久在线视频 | 天天干天天操 | 成人a在线视频免费观看 | 中文字幕一区二区在线观看 | 亚洲天堂中文字幕 | 国产成人在线播放 | 亚洲一本 | 欧美一区2区三区4区公司二百 | 久久69精品久久久久久国产越南 | 久久久91精品国产一区二区三区 | 欧美精三区欧美精三区 | 夜夜操av| 国产精品久久久亚洲 | 午夜在线观看视频 | 久久丁香| 欧美精品一区二区三区在线 | 成人免费黄色大片 | 一区二区三区精品视频 | 亚洲人成网站b2k3cm | 黄大片在线观看 | 国产黄色免费网站 | 中文字幕一区二区三 | 91久久精品国产91久久性色tv | 日韩av一区二区在线观看 | 欧美午夜精品 | 国产午夜视频在线观看 | 久久免费精品一区二区三区 | 成人综合网站 | 可以在线观看的黄色 | 国产精品久久久久久久久久免费 | 免费一区二区 | 成人第一区 | 9999热视频 | 怡红院成人影院 | 国产一区二区在线免费观看 | 在线观看免费视频国产 | 日本中文字幕在线 | www免费网站在线观看 | 福利在线播放 | 国产精品视频观看 | 午夜私人影院在线观看 |