国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

設(shè)計(jì)模式學(xué)習(xí)筆記:單例模式

starsfun / 3109人閱讀

摘要:一概念一般采用單例模式就是為了滿足只創(chuàng)建一個(gè)類的需要。單例模式有兩個(gè)特點(diǎn)一個(gè)類僅有一個(gè)實(shí)例僅有一個(gè)全局訪問點(diǎn)二寫法餓漢式所謂餓漢式,是指這個(gè)類的實(shí)例在類加載階段就已經(jīng)創(chuàng)建出來了。使用在對(duì)象被使用時(shí)才實(shí)例化枚舉式

一、概念

一般采用單例模式就是為了滿足“只創(chuàng)建一個(gè)類”的需要。

單例模式有兩個(gè)特點(diǎn):
(1)一個(gè)類僅有一個(gè)實(shí)例
(2)僅有一個(gè)全局訪問點(diǎn)

二、寫法

1、餓漢式
所謂餓漢式,是指這個(gè)類的實(shí)例在類加載階段就已經(jīng)創(chuàng)建出來了。

public class Singleton1 {
    //在類的內(nèi)部實(shí)例化一個(gè)實(shí)例
    private static final Singleton1 instance = new Singleton1();
    //隱藏構(gòu)造方法
    private Singleton1() {
    }
    //對(duì)外開放一個(gè)獲取實(shí)例的方法
    public static  Singleton1 getInstance(){
        return instance;
    }
}

當(dāng)然也可以使用static代碼塊。(注意這里的final,看網(wǎng)上有各種寫法,加或者不加的都有,我認(rèn)為這里可以加,這樣getInstance方法里就不需要判空了)

這種方式雖然能夠有效避免線程安全的問題,但是卻可能造成不必要的浪費(fèi),因?yàn)橐苍S這個(gè)實(shí)例并不需要用到,或者就用到一兩次,卻要一直占用內(nèi)存。

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

public class InnerClassSingleton {
    //在靜態(tài)內(nèi)部類中實(shí)例化對(duì)象
    private static class SingletonHolder{
        private static final InnerClassSingleton instance = new InnerClassSingleton();
    }
    //隱藏構(gòu)造方法
    private InnerClassSingleton(){
    }
    //對(duì)外提供訪問方法
    public static final InnerClassSingleton getInstance() {
        return SingletonHolder.instance;
    }
}

3、懶漢式
所謂懶漢式,就是在使用時(shí)才加載,比較“懶一些”。

public class Singleton2 {
    private static Singleton2 instance;
    private Singleton2(){
    }
    public static Singleton2 getInstance(){
        //在對(duì)象被使用時(shí)才實(shí)例化
        if (instance == null)
            instance = new Singleton2();
        return instance;
    }
}

注意:加上synchronized關(guān)鍵字就可以保證線程安全。

public class Singleton2 {
    private static Singleton2 instance;
    private Singleton2(){
    }
    public static synchronized Singleton2 getInstance(){
        //在對(duì)象被使用時(shí)才實(shí)例化
        if (instance == null)
            instance = new Singleton2();
        return instance;
    }
}

4、當(dāng)然上述方式效率比較低,因?yàn)閟ynchronized鎖的范圍太大了

public class Singleton2 {
    private static Singleton2 instance;
    private Singleton2(){
    }
    public static Singleton2 getInstance(){
        //在對(duì)象被使用時(shí)才實(shí)例化
        synchronized (Singleton2.class){
            if (instance == null)
                instance = new Singleton2();
            return instance;
        }
    }
}

這樣就縮小了鎖的范圍,但是這種方式依然存在問題,因?yàn)镴ava內(nèi)存模型的機(jī)制,程序可能會(huì)崩潰,因此就要用到volatile。

5、使用volatile

public class Singleton2 {
    private static volatile Singleton2 instance;
    private Singleton2(){
    }
    public static Singleton2 getInstance(){
        //在對(duì)象被使用時(shí)才實(shí)例化
        if (instance == null){
            synchronized (Singleton2.class){
                if (instance == null)
                    instance = new Singleton2();
                return instance;
            }
        }
    }
}

6、枚舉式

public enum  Singleton3 {
    INSTANCE;
    Singleton() {
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/75285.html

相關(guān)文章

  • javascript設(shè)計(jì)模式學(xué)習(xí)筆記單例模式

    摘要:單例模式單例模式就是保證一個(gè)類僅有一個(gè)實(shí)例并提供一個(gè)訪問它的全局訪問點(diǎn)其最大的特點(diǎn)就是永遠(yuǎn)只返回一個(gè)實(shí)例實(shí)例通過來獲取類的唯一對(duì)象其缺點(diǎn)也明顯增加了類的不透明性透明的單例模式最終會(huì)被返回使用代理實(shí)現(xiàn)單例模式將負(fù)責(zé)管理單例的邏輯移到了代理類中 單例模式 單例模式 就是保證一個(gè)類僅有一個(gè)實(shí)例, 并提供一個(gè)訪問它的全局訪問點(diǎn). 其最大的特點(diǎn)就是 永遠(yuǎn)只返回一個(gè)實(shí)例 var Sin...

    xiaolinbang 評(píng)論0 收藏0
  • (CZ深入淺出Java基礎(chǔ))設(shè)計(jì)模式筆記

    摘要:在設(shè)計(jì)模式中,所有的設(shè)計(jì)模式都遵循這一原則。其實(shí)就是說在應(yīng)用程序中,所有的類如果使用或依賴于其他的類,則應(yīng)該依賴這些其他類的抽象類,而不是這些其他類的具體類。使用設(shè)計(jì)模式是為了可重用代碼讓代碼更容易被他人理解保證代碼可靠性。 這是劉意老師的JAVA基礎(chǔ)教程的筆記講的賊好,附上傳送門 傳智風(fēng)清揚(yáng)-超全面的Java基礎(chǔ) 一、面向?qū)ο笏枷朐O(shè)計(jì)原則 1.單一職責(zé)原則 其實(shí)就是開發(fā)人員經(jīng)常說的高...

    李昌杰 評(píng)論0 收藏0
  • 設(shè)計(jì)模式筆記python實(shí)現(xiàn)

    摘要:設(shè)計(jì)模式學(xué)習(xí)裝飾器模式這個(gè)在我的筆記中有介紹工廠模式未完成,待更新單例模式保證一個(gè)對(duì)象最多只有一個(gè)實(shí)例存在。對(duì)安全性要求較高的場(chǎng)景,比如銀行的修改余額業(yè)務(wù)。如果我們不使用單例模式,那么就會(huì)創(chuàng)建三個(gè)不同的實(shí)例。 設(shè)計(jì)模式學(xué)習(xí) 1.裝飾器模式 這個(gè)在我的筆記中有介紹 2.工廠模式 author : liibntime :2018-11-6未完成,待更新 3.單例模式 保證一個(gè)對(duì)象最多只有一...

    raledong 評(píng)論0 收藏0
  • 設(shè)計(jì)模式學(xué)習(xí)筆記(一)【Singleton、Adapter、Iterator 、Prototype

    摘要:今天上課的時(shí)候老師開始講個(gè)設(shè)計(jì)模式,為加深印象,特開一篇文章來做記錄。其中參考大話設(shè)計(jì)模式以及上課的例子,后期會(huì)補(bǔ)充關(guān)于的應(yīng)用保證一個(gè)類僅有一個(gè)實(shí)例。單例是有狀態(tài)的,允許子類繼承,擁有唯一的對(duì)象實(shí)例。原始對(duì)象與副本引用同一對(duì)象。 今天上課的時(shí)候老師開始講23個(gè)設(shè)計(jì)模式,為加深印象,特開一篇文章來做記錄。其中參考《大話設(shè)計(jì)模式》以及上課的例子(java),后期會(huì)補(bǔ)充關(guān)于js的應(yīng)用 ...

    FreeZinG 評(píng)論0 收藏0
  • 設(shè)計(jì)模式學(xué)習(xí)筆記(一)【Singleton、Adapter、Iterator 、Prototype

    摘要:今天上課的時(shí)候老師開始講個(gè)設(shè)計(jì)模式,為加深印象,特開一篇文章來做記錄。其中參考大話設(shè)計(jì)模式以及上課的例子,后期會(huì)補(bǔ)充關(guān)于的應(yīng)用保證一個(gè)類僅有一個(gè)實(shí)例。單例是有狀態(tài)的,允許子類繼承,擁有唯一的對(duì)象實(shí)例。原始對(duì)象與副本引用同一對(duì)象。 今天上課的時(shí)候老師開始講23個(gè)設(shè)計(jì)模式,為加深印象,特開一篇文章來做記錄。其中參考《大話設(shè)計(jì)模式》以及上課的例子(java),后期會(huì)補(bǔ)充關(guān)于js的應(yīng)用 ...

    liuchengxu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<