麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > 綜合 > 正文

Kotlin中單利常用的五種寫法

2024-07-21 23:03:46
字體:
供稿:網(wǎng)友

前言

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

加載類時(shí)創(chuàng)建單利

Java實(shí)現(xiàn)

public class Config{ private static Config INSTANCE=new Config(); private Config(){ //構(gòu)造函數(shù) } public static Config getInstance(){ return INSTANCE; }}

Kotlin實(shí)現(xiàn)

object Config{}

上面這種寫法簡(jiǎn)單粗暴,直接在加載類的時(shí)候創(chuàng)建,但這樣會(huì)拖慢啟動(dòng)進(jìn)程,因此,可以在用到的時(shí)候再加載,比如下面這種寫法

懶加載寫法

Java實(shí)現(xiàn)

public class Config{ private static Config INSTANCE; private Config(){ //構(gòu)造函數(shù) } public static Config getInstance(){ if(null==INSTANCE){ INSTSANCE=new Config(); } return INSTANCE; }}

Kotlin實(shí)現(xiàn)

public class Config{ companion object{ val instance by lazy(LazyThreadSafetyMode.NONE){  Config() } }}

懶加載雖然避免在加載類的時(shí)候創(chuàng)建,但是線程不安全,如果同時(shí)多個(gè)類獲取單利,有可能會(huì)創(chuàng)建多個(gè)單利,因此可以在創(chuàng)建單利的時(shí)候加線程鎖,比如下面這種寫法:

同步鎖寫法

Java實(shí)現(xiàn)

public class Config{ private static Config INSTANCE; private Config(){ //構(gòu)造函數(shù) } public static synchronized Config getInstance(){ if(null==INSTANCE){  INSTANCE=new Config(); } return INSTANCE; }}

Kotlin實(shí)現(xiàn)

class Config{ companion object{ private var instance:Config?=null @Synchronized fun get():Config{  if(nnull==instance) instance=Config()  return instance } }}

同步鎖避免單利不會(huì)被重復(fù)創(chuàng)建,但是同步鎖

雙重校驗(yàn)寫法

Java實(shí)現(xiàn)

public class Config{ private static volatile Config INSTANCE; private Config(){ //構(gòu)造函數(shù) } public static Config getInstance(){ if(null==INSTANCE){  synchronized(Config.class){  if(null==INSTANCE){   INSTSANCE=new Config();  }  } } return INSTANCE; }}

Kotlin實(shí)現(xiàn)

class Config{ companion object{ val instance by lazy(LazyThreadSafetyMode.SYNCHRONIZED){  Config() } }}

靜態(tài)內(nèi)部類寫法

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

Java實(shí)現(xiàn)

public class Config{ private static class Helper{ private static Config INSTANCE=new Config(); } private Config(){ //構(gòu)造函數(shù) } public static Config getInstance(){ return Helper.INSTANCE; }}

Kotlin實(shí)現(xiàn)

class Config private constructor(){ companion object{ fun getInstance = Helper.instance } private object Helper{ val instance = Config() }}

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到kotlin教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 欧美人成在线 | 欧美日韩大片在线观看 | 中国性xxx | 国产亚洲精品久久午夜玫瑰园 | 成人男女视频 | 中文字幕网在线 | 精品亚洲视频在线 | 亚洲5区| 日本xxxx视频| 精品一区二区三区中文字幕老牛 | 色妹子久久 | 欧美一级久久 | 日韩电影av在线 | 九九视频久久 | 欧美片a| 久久成人免费网 | a级毛片免费观看在线播放 日本aaa一级片 | 免费在线性爱视频 | 黄色免费在线视频网站 | 国产品久久 | 毛片免费看电影 | 欧美特一级片 | 欧洲a级片 | 看免费一级毛片 | 午夜精品久久久久久中宇 | 欧美日韩在线免费观看 | www.48xx.com | 成人免费观看49www在线观看 | 九色国产| 黄片毛片一级 | 奶子吧naiziba.cc免费午夜片在线观看 | 92看片淫黄大片欧美看国产片 | 日产精品久久久一区二区福利 | 国产精品爱久久久久久久 | 久久99国产伦子精品免费 | 精品国产99久久久久久宅男i | 国产一级做a爰片在线看 | 欧美一级二级毛片视频 | 成人午夜在线播放 | 777午夜精品视频在线播放 | 黄色av.com|