国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Kotlin中單例模式和Java的對比淺析

2019-12-12 00:40:31
字體:
供稿:網(wǎng)友

前言

單例模式,一直以來是我們在日常開發(fā)中最常用的一種設(shè)計模式,更是面試中非常重要,也非常容易被問到的問題。在日常開發(fā)中,大家常用的語言還是Java,但今天我給大家?guī)淼氖窃贙otlin語言中,單例模式是怎么編寫的,并且會對比Java方式,下面話不多說了,來一起看看詳細(xì)的介紹吧

一、懶人寫法(惡漢式)

java中

 public class Singleton{  public static final Singleton instance = new Singleton();  public Singleton getInstance() {    return instance;  } }

kotlin中

最簡單的寫法,直接用object聲明

object Singleton{}

二、基本懶加載(未實現(xiàn)線程同步)

注:這種方式實現(xiàn)了懶加載,但是不是線程安全的,可能在多個線程中創(chuàng)建多個不同的實例

java中

public class Singleton {  public static Singleton instance = null;  private Singleton (){}  public Singleton getInstance() {   if (instance == null) {    instance = new Singleton();   }   return instance;  }}

kotlin中

class Singleton private constructor{ companion object {   val intance by lazy(LazyThreadSafetyMode.NONE) { Singleton() } }}

三、線程同步單例1

注:其實kotlin這種寫法可以說是java直譯過來的,雖說是線程安全的,但是太影響效率,主要看下面這種

java中

public class Singleton {  private static Singleton instance = null;  private Singleton (){}  public static synchronized Singleton getInstance() {   if (instance == null) {    instance = new Singleton();    }   return instance;  } }

kotlin中

class Singleton private constructor(){  companion object {   lateinit var instance: Singleton   @Synchronized   fun get(): Singleton {     if (instance == null) {       instance = Singleton();      }    return instance!!   }  }}

四、線程同步單例2

注:線程同步,懶加載,無同步引起的效率問題

java中雙檢鎖單例

public class Singleton {  private static Singleton instance = null;  private Singleton (){}  public static Singleton getInstance() {   if (instance == null) {   synchronized (Singleton.class) {     if (instance == null) {      instance = new Singleton();     }    }  }  return instance; }}

kotlin

class Singleton private constructor(){  companion object {   val intance by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { Singleton() } }}

五、靜態(tài)內(nèi)部類單例

java中

public class Singleton { private Singleton (){} private static class Holder { private static Singleton instance = new Singleton(); } public static Singleton getInstance(){  return Holder.instance; }}

kotlin中

class Singleton private constructor(){  companion object {   fun getInstance(): Singleton {    return Holder.instance   }  }  private object Holder {   val instance = Singleton()  } }

總結(jié)

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 普宁市| 北碚区| 柯坪县| 安乡县| 北碚区| 武冈市| 祁东县| 香港| 南华县| 香河县| 舞阳县| 双牌县| 湟中县| 凌源市| 突泉县| 苏尼特右旗| 呼伦贝尔市| 元氏县| 安义县| 福安市| 井冈山市| 墨江| 九龙县| 寿宁县| 阿克苏市| 加查县| 汕头市| 酒泉市| 长沙市| 南宫市| 克东县| 报价| 抚松县| 肇庆市| 永顺县| 遂溪县| 准格尔旗| 洛浦县| 渑池县| 建始县| 乌鲁木齐市|