最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Kotlin中單利常用的五種寫法

 更新時間:2018年06月21日 10:52:20   作者:土逗牛肉  
這篇文章主要給大家介紹了關(guān)于Kotlin中單利常用的五種寫法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)合作工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

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

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

Java實現(xiàn)

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

Kotlin實現(xiàn)

object Config{}

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

懶加載寫法

Java實現(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實現(xiàn)

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

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

同步鎖寫法

Java實現(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實現(xiàn)

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

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

雙重校驗寫法

Java實現(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實現(xiàn)

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

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

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

Java實現(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實現(xiàn)

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

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

最新評論

安徽省| 仙桃市| 太谷县| 翁牛特旗| 军事| 湘乡市| 黔江区| 阳朔县| 集贤县| 乐业县| 准格尔旗| 雅安市| 同江市| 宝清县| 阿尔山市| 肇源县| 郯城县| 江油市| 平乡县| 固镇县| 光山县| 英吉沙县| 金沙县| 新和县| 东乡族自治县| 武定县| 宁波市| 响水县| 浦江县| 南靖县| 荆门市| 犍为县| 新蔡县| 涟水县| 乌兰察布市| 化隆| 乌兰浩特市| 滕州市| 娄底市| 东平县| 区。|