Kotlin中單例模式和Java的對(duì)比淺析
前言
單例模式,一直以來(lái)是我們?cè)谌粘i_(kāi)發(fā)中最常用的一種設(shè)計(jì)模式,更是面試中非常重要,也非常容易被問(wèn)到的問(wèn)題。在日常開(kāi)發(fā)中,大家常用的語(yǔ)言還是Java,但今天我給大家?guī)?lái)的是在Kotlin語(yǔ)言中,單例模式是怎么編寫(xiě)的,并且會(huì)對(duì)比Java方式,下面話(huà)不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧
一、懶人寫(xiě)法(惡漢式)
java中
public class Singleton{ public static final Singleton instance = new Singleton(); public Singleton getInstance() { return instance; } }
kotlin中
最簡(jiǎn)單的寫(xiě)法,直接用object聲明
object Singleton{}
二、基本懶加載(未實(shí)現(xiàn)線(xiàn)程同步)
注:這種方式實(shí)現(xiàn)了懶加載,但是不是線(xiàn)程安全的,可能在多個(gè)線(xiàn)程中創(chuàng)建多個(gè)不同的實(shí)例
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() } } }
三、線(xiàn)程同步單例1
注:其實(shí)kotlin這種寫(xiě)法可以說(shuō)是java直譯過(guò)來(lái)的,雖說(shuō)是線(xiàn)程安全的,但是太影響效率,主要看下面這種
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!! } } }
四、線(xiàn)程同步單例2
注:線(xiàn)程同步,懶加載,無(wú)同步引起的效率問(wèn)題
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)部類(lè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é)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Android輕松實(shí)現(xiàn)多語(yǔ)言的方法示例
本篇文章主要介紹了Android輕松實(shí)現(xiàn)多語(yǔ)言的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11Android使用Fragment打造萬(wàn)能頁(yè)面切換框架
這篇文章主要介紹了Android使用Fragment打造萬(wàn)能頁(yè)面切換框架的相關(guān)資料,需要的朋友可以參考下2016-01-01android開(kāi)發(fā)教程之獲取power_profile.xml文件的方法(android運(yùn)行時(shí)能耗值)
在Android手機(jī)中,對(duì)于手機(jī)中的每個(gè)部件(cpu、led、gps、3g等等)運(yùn)行時(shí)對(duì)應(yīng)的能耗值都放在power_profile.xml文件中2014-02-02android實(shí)現(xiàn)支付寶咻一咻的幾種思路方法
本篇文章主要介紹了android實(shí)現(xiàn)支付寶咻一咻的幾種思路方法,詳解的介紹了幾種實(shí)現(xiàn)咻一咻的思路和方法,有需要的可以了解一下。2016-11-11Android 實(shí)現(xiàn)通知消息水平播放、無(wú)限循環(huán)效果
Android 實(shí)現(xiàn)通知消息水平播放、無(wú)限循環(huán)效果非常常見(jiàn),今天小編給大家分享實(shí)例代碼感興趣的朋友參考下吧2017-08-08Android獲取本機(jī)電話(huà)號(hào)碼的簡(jiǎn)單方法
Android獲取本機(jī)電話(huà)號(hào)碼的簡(jiǎn)單方法,需要的朋友可以參考一下2013-05-05基于Android實(shí)現(xiàn)保存圖片到本地并可以在相冊(cè)中顯示出來(lái)
App應(yīng)用越來(lái)越人性化,不僅界面優(yōu)美而且服務(wù)也很多樣化,操作也非常方便。通過(guò)本篇文章給大家介紹基于Android實(shí)現(xiàn)保存圖片到本地并可以在相冊(cè)中顯示出來(lái),對(duì)android保存圖片相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2015-12-12Android依據(jù)名字通過(guò)反射獲取在drawable中的圖片
依據(jù)圖片的名字,通過(guò)反射獲取其在drawable中的ID,在根據(jù)此ID顯示圖片,具體實(shí)現(xiàn)如下,感興趣的朋友可以參考下哈2013-06-06談?wù)凙ndroid里的Context的使用實(shí)例
這篇文章主要介紹了談?wù)凙ndroid里的Context的使用實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-11-11Android 解決游戲發(fā)行切包資源索引沖突的問(wèn)題
這篇文章主要介紹了Android 解決游戲發(fā)行切包資源索引沖突的問(wèn)題,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下2021-03-03