摘要:?jiǎn)卫J降膸追N實(shí)現(xiàn)方法具體如下懶漢模式優(yōu)點(diǎn)可以延遲加載缺點(diǎn)多線程不安全餓漢模式優(yōu)點(diǎn)多線程安全缺點(diǎn)加載類時(shí)就初始化完成無(wú)法延時(shí)加載雙重檢查優(yōu)點(diǎn)多線程安全延遲加載缺點(diǎn)同步耗時(shí)靜態(tài)內(nèi)部類優(yōu)點(diǎn)多線程安全延遲加載耗時(shí)短與雙重檢查相比用緩存實(shí)現(xiàn)優(yōu)
單例模式的幾種實(shí)現(xiàn)方法,具體如下:
懶漢模式public class Singleton{ private static Singleton instance; private Singleton(){ } public static Singleton getInstance(){ if(instance == null){ instance = new Singleton(); } return instance; } }
優(yōu)點(diǎn)
可以延遲加載
缺點(diǎn)
多線程不安全
餓漢模式public class Singleton { private static Singleton instance = new Singleton(); private Singleton(){} public static Singleton getInstance(){ return instance; } }
優(yōu)點(diǎn)
多線程安全
缺點(diǎn)
加載類時(shí)就初始化完成,無(wú)法延時(shí)加載
雙重檢查public class Singleton { private static Singleton instance ; private Singleton(){} public static Singleton getInstance(){ if (instance == null){ synchronized (Singleton.class){ if (instance == null){ instance = new Singleton(); } } } return instance; } }
優(yōu)點(diǎn)
多線程安全
延遲加載
缺點(diǎn)
同步耗時(shí)
靜態(tài)內(nèi)部類public class Singleton { private Singleton(){} public static Singleton getInstance(){ return SingletonHolder.instance; } private static class SingletonHolder { private static Singleton instance = new Singleton(); } }
優(yōu)點(diǎn)
多線程安全
延遲加載
耗時(shí)短(與雙重檢查相比)
用緩存實(shí)現(xiàn)public class Singleton { private static final String KEY = "instance"; private static Mapmap = new HashMap<>(); private Singleton(){} public static Singleton getInstance(){ Singleton singleton ; if (map.get(KEY) == null){ singleton = new Singleton(); map.put(KEY, singleton); } else { singleton = map.get(KEY); } return singleton; } }
優(yōu)點(diǎn)
線程安全
缺點(diǎn)
占用內(nèi)存較大
枚舉模式public enum Singleton { instance; public void operate(){} }
優(yōu)點(diǎn)
簡(jiǎn)潔
缺點(diǎn)
占用內(nèi)存大(Android官方不推薦使用枚舉)
更多文章請(qǐng)移步我的博客:DevWiki Bolg
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/65535.html
摘要:使用靜態(tài)類體現(xiàn)的是基于對(duì)象,而使用單例設(shè)計(jì)模式體現(xiàn)的是面向?qū)ο蟆6帉憜卫J降拇a編寫單例模式的代碼其實(shí)很簡(jiǎn)單,就分了三步將構(gòu)造函數(shù)私有化在類的內(nèi)部創(chuàng)建實(shí)例提供獲取唯一實(shí)例的方法餓漢式根據(jù)上面的步驟,我們就可以輕松完成創(chuàng)建單例對(duì)象了。 前言 只有光頭才能變強(qiáng) 回顧前面: 給女朋友講解什么是代理模式 包裝模式就是這么簡(jiǎn)單啦 本來(lái)打算沒(méi)那么快更新的,這陣子在刷Spring的書(shū)籍。在看...
摘要:?jiǎn)卫J疥P(guān)注的重點(diǎn)私有構(gòu)造器線程安全延遲加載序列化和反序列化安全反射攻擊安全相關(guān)設(shè)計(jì)模式單例模式和工廠模式工廠類可以設(shè)計(jì)成單例模式。 0x01.定義與類型 定義:保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)全局訪問(wèn)點(diǎn) 類型:創(chuàng)建型 UML showImg(https://segmentfault.com/img/bVbtDJ2?w=402&h=268); 單例模式的基本要素 私有的構(gòu)造方...
摘要:如果需要防范這種攻擊,請(qǐng)修改構(gòu)造函數(shù),使其在被要求創(chuàng)建第二個(gè)實(shí)例時(shí)拋出異常。單例模式與單一職責(zé)原則有沖突。源碼地址參考文獻(xiàn)設(shè)計(jì)模式之禪 定義 單例模式是一個(gè)比較簡(jiǎn)單的模式,其定義如下: 保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)。 或者 Ensure a class has only one instance, and provide a global point of ac...
摘要:總結(jié)我們主要介紹到了以下幾種方式實(shí)現(xiàn)單例模式餓漢方式線程安全懶漢式非線程安全和關(guān)鍵字線程安全版本懶漢式雙重檢查加鎖版本枚舉方式參考設(shè)計(jì)模式中文版第二版設(shè)計(jì)模式深入理解單例模式我是一個(gè)以架構(gòu)師為年之內(nèi)目標(biāo)的小小白。 初遇設(shè)計(jì)模式在上個(gè)寒假,當(dāng)時(shí)把每個(gè)設(shè)計(jì)模式過(guò)了一遍,對(duì)設(shè)計(jì)模式有了一個(gè)最初級(jí)的了解。這個(gè)學(xué)期借了幾本設(shè)計(jì)模式的書(shū)籍看,聽(tīng)了老師的設(shè)計(jì)模式課,對(duì)設(shè)計(jì)模式算是有個(gè)更進(jìn)一步的認(rèn)識(shí)。...
摘要:總之,選擇單例模式就是為了避免不一致?tīng)顟B(tài),避免政出多頭。二餓漢式單例餓漢式單例類在類初始化時(shí),已經(jīng)自行實(shí)例化靜態(tài)工廠方法餓漢式在類創(chuàng)建的同時(shí)就已經(jīng)創(chuàng)建好一個(gè)靜態(tài)的對(duì)象供系統(tǒng)使用,以后不再改變,所以天生是線程安全的。 概念: Java中單例模式是一種常見(jiàn)的設(shè)計(jì)模式,單例模式的寫法有好幾種,這里主要介紹兩種:懶漢式單例、餓漢式單例。 單例模式有以下特點(diǎn): 1、單例類只能有一個(gè)實(shí)例。 ...
摘要:一般來(lái)說(shuō),這種單例實(shí)現(xiàn)有兩種思路,私有構(gòu)造器,枚舉。而這種方式又分了飽漢式,餓漢式。通過(guò)關(guān)鍵字防止指令重排序。什么是單例?為什么要用單例? 一個(gè)類被設(shè)計(jì)出來(lái),就代表它表示具有某種行為(方法),屬性(成員變量),而一般情況下,當(dāng)我們想使用這個(gè)類時(shí),會(huì)使用new關(guān)鍵字,這時(shí)候jvm會(huì)幫我們構(gòu)造一個(gè)該類的實(shí)例。而我們知道,對(duì)于new這個(gè)關(guān)鍵字以及該實(shí)例,相對(duì)而言是比較耗費(fèi)資源的。所以如果我們能夠想...
閱讀 2612·2021-11-16 11:40
閱讀 3409·2021-11-08 13:26
閱讀 871·2021-10-28 09:32
閱讀 3530·2021-09-13 10:26
閱讀 803·2019-08-30 15:55
閱讀 777·2019-08-30 15:44
閱讀 1908·2019-08-30 15:44
閱讀 1756·2019-08-30 13:48