您好,登錄后才能下訂單哦!
前言
單例模式,一直以來是我們在日常開發中最常用的一種設計模式,更是面試中非常重要,也非常容易被問到的問題。在日常開發中,大家常用的語言還是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() } }
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。