前言
成都創(chuàng)新互聯(lián)專注于平潭網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供平潭營銷型網(wǎng)站建設(shè),平潭網(wǎng)站制作、平潭網(wǎng)頁設(shè)計、平潭網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)服務(wù),打造平潭網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供平潭網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
單例模式,一直以來是我們在日常開發(fā)中最常用的一種設(shè)計模式,更是面試中非常重要,也非常容易被問到的問題。在日常開發(fā)中,大家常用的語言還是Java,但今天我給大家?guī)淼氖窃贙otlin語言中,單例模式是怎么編寫的,并且會對比Java方式,下面話不多說了,來一起看看詳細的介紹吧
一、懶人寫法(惡漢式)
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)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對創(chuàng)新互聯(lián)的支持。