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

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

java設(shè)計(jì)模式之單例模式

2019-11-14 10:09:03
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

單例模式:確保一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問(wèn)點(diǎn)。

1、懶漢模式:

public class singleton { PRivate static singleton mSingleton; private singleton(){} public static singleton getInstance(){ if (mSingleton == null) { mSingleton = new singleton(); } return mSingleton; }}

通過(guò)singleton mSingleton = singleton.getInstance();來(lái)獲取singleton的實(shí)例。這種模式是在需要的時(shí)候才會(huì)創(chuàng)建,如果在多線程中使用,會(huì)導(dǎo)致創(chuàng)建多個(gè)實(shí)例,這時(shí)候需要用同步鎖來(lái)確保只有一個(gè)實(shí)例。

2、同步鎖模式:

public class singleton { private static singleton mSingleton; private singleton(){} public static synchronized singleton getInstance(){ if (mSingleton == null) { mSingleton = new singleton(); } return mSingleton; }}

雖然同步鎖可以解決多個(gè)實(shí)例的問(wèn)題,但是在使用過(guò)程中,每次調(diào)用實(shí)例,都需要同步,對(duì)程序的性能來(lái)說(shuō)有很大影響,有沒(méi)有辦法解決這個(gè)問(wèn)題呢,答案是肯定的,“雙重檢查加鎖”模式可以減少使用同步。

3、雙重檢查加鎖模式:

public class singleton { private static singleton mSingleton; private singleton(){} public static singleton getInstance(){ if (mSingleton == null) { synchronized (singleton.class) { if (mSingleton == null) { mSingleton = new singleton(); } } } return mSingleton; }}

4、惡漢模式:

public class singleton { private static singleton mSingleton = new singleton(); private singleton(){} public static singleton getInstance(){ return mSingleton; }}

Singleton實(shí)例在singleton類加載的時(shí)候就實(shí)例化,這種方式是最簡(jiǎn)單的方式,并且不存在多個(gè)實(shí)例的情況,也沒(méi)有線程同步的問(wèn)題,缺點(diǎn)是即使沒(méi)有使用該單例,它也會(huì)在類加載時(shí)被創(chuàng)建,浪費(fèi)內(nèi)存。

5、靜態(tài)內(nèi)部類:

public class singleton { private static class singletonHolder{ private static singleton mSingleton = new singleton(); } private singleton(){} public static singleton getInstance(){ return singletonHolder.mSingleton; }}

這種方式同樣利用了類加載機(jī)制來(lái)保證只創(chuàng)建一個(gè)instance實(shí)例。它與餓漢模式一樣,也是利用了類加載機(jī)制,因此不存在多線程并發(fā)的問(wèn)題。不一樣的是,它是在內(nèi)部類里面去創(chuàng)建對(duì)象實(shí)例。這樣的話,只要應(yīng)用中不使用內(nèi)部類,JVM就不會(huì)去加載這個(gè)單例類,也就不會(huì)創(chuàng)建單例對(duì)象,從而實(shí)現(xiàn)懶漢式的延遲加載。也就是說(shuō)這種方式可以同時(shí)保證延遲加載和線程安全。

6、枚舉:

public enum singleton{ instance; private singleton(){}}

java中,為了強(qiáng)制只實(shí)例化一個(gè)對(duì)象,最好的方法是使用一個(gè)枚舉量。


上一篇:1025

下一篇:C++ std::enable_if解析

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 连平县| 滦南县| 永定县| 迭部县| 河间市| 桃江县| 东丽区| 西峡县| 和静县| 阿拉善盟| 城市| 胶州市| 景东| 四子王旗| 香河县| 渝北区| 郑州市| 普陀区| 曲沃县| 皮山县| 莱芜市| 麻栗坡县| 龙海市| 萍乡市| 陇川县| 垫江县| 穆棱市| 饶平县| 湾仔区| 隆尧县| 绍兴县| 浦城县| 万荣县| 德清县| 盐津县| 湘阴县| 康保县| 育儿| 抚顺县| 温州市| 永安市|