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

首頁 > 開發 > Java > 正文

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

2024-07-21 23:03:48
字體:
來源:轉載
供稿:網友

前言

單例模式,一直以來是我們在日常開發中最常用的一種設計模式,更是面試中非常重要,也非常容易被問到的問題。在日常開發中,大家常用的語言還是Java,但今天我給大家帶來的是在Kotlin語言中,單例模式是怎么編寫的,并且會對比Java方式,下面話不多說了,來一起看看詳細的介紹吧

一、懶人寫法(惡漢式)

java中

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

kotlin中

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

object Singleton{}

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

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

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() } }}

五、靜態內部類單例

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()  } }

總結

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


注:相關教程知識閱讀請移步到kotlin教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 太原市| 乐都县| 莲花县| 宣化县| 博白县| 疏勒县| 十堰市| 银川市| 中牟县| 湛江市| 象山县| 华蓥市| 聂拉木县| 蒙自县| 濮阳县| 龙胜| 桃园县| 金昌市| 乐东| 垫江县| 平阴县| 建阳市| 正阳县| 图木舒克市| 青河县| 子洲县| 平泉县| 谷城县| 霸州市| 兴化市| 永修县| 莲花县| 扶绥县| 琼结县| 贵德县| 信阳市| 礼泉县| 新田县| 香港 | 黑山县| 古田县|