国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

設(shè)計(jì)模式篇---單例模式

這篇具有很好參考價(jià)值的文章主要介紹了設(shè)計(jì)模式篇---單例模式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

概念

單例模式是結(jié)構(gòu)最簡(jiǎn)單的設(shè)計(jì)模式,通過單例模式可以保證在整個(gè)系統(tǒng)中的一個(gè)類只有一個(gè)實(shí)例,從而節(jié)約系統(tǒng)資源。舉個(gè)例子,比如windows電腦下的任務(wù)管理器只能打開一個(gè),這個(gè)就是單例模式,如果不這樣做,則會(huì)彈出多個(gè)窗口,但這些窗口顯示的內(nèi)容完全一樣,浪費(fèi)了資源。

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

單例模式有3個(gè)要點(diǎn):
1、某個(gè)類只能有一個(gè)實(shí)例。
2、該類必須自行創(chuàng)建這個(gè)實(shí)例。
3、該類必須自行向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。

結(jié)構(gòu)與實(shí)現(xiàn)

單例模式只有一個(gè)類,類圖如下:
設(shè)計(jì)模式篇---單例模式
單例類擁有一個(gè)私有的構(gòu)造方法,保證外部無法通過new關(guān)鍵字來進(jìn)行實(shí)例化,此外,它還包含一個(gè)靜態(tài)私有成員變量和靜態(tài)公有的工廠方法,該工廠負(fù)責(zé)檢驗(yàn)實(shí)例的存在性并實(shí)例化自己,然后存儲(chǔ)在成員變量中。
按照被實(shí)例化的時(shí)機(jī),單例模式可以分為兩大類,懶漢模式和餓漢模式。

1、餓漢式
當(dāng)類加載的時(shí)候就進(jìn)行實(shí)例化,這種方式叫做餓漢式。

public class EagerSingleton {
	//static 變量在類加載的時(shí)候就已經(jīng)初始化。
    private static EagerSingleton instance = new EagerSingleton();

    //private 構(gòu)造,保證外部無法訪問
    private EagerSingleton() {
    }

    public static EagerSingleton getInstance() {
        return instance;
    }
}

2、懶漢式
故名思義,比較懶,用的時(shí)候在實(shí)例化,也叫做延遲加載。直接上doubleCheck。

public class LazySingleton {
    private static volatile LazySingleton instance = null;
    
    private LazySingleton() {
    }

    public static LazySingleton getInstance() {
        //判斷是否實(shí)例化過,是的話,則直接返回。  步驟一
        if (instance == null) {
            //防止多線程同時(shí)訪問,造成多次實(shí)例化。
            synchronized (LazySingleton.class) {
                //兩個(gè)線程情況下,A線程走到這里,B線程還在synchronized 外等待,
                // 當(dāng)B線程進(jìn)入synchronized后,A線程已經(jīng)實(shí)例化完成,所以需要再次判斷,防止多次實(shí)例化。
                if (instance == null) {
                // 步驟二
                    instance = new LazySingleton();
                }
            }
        }
        return instance;
    }
}

這里之所以使用volatile來修飾,是為了保證原子性和有序性。
實(shí)例化一個(gè)對(duì)象主要分為三部分
1、先給對(duì)象分配一個(gè)內(nèi)存空間。
2、創(chuàng)建該對(duì)象的引用
3、將該引用指向該存儲(chǔ)空間。

當(dāng)線程A走到上面代碼的步驟二時(shí),僅僅是完成了上面實(shí)例化對(duì)象三步中的第一步,但線程B這時(shí)候走到了上面代碼的步驟一,判斷不為null,則直接返回,此時(shí)對(duì)象還未實(shí)例化完成,這就發(fā)生了錯(cuò)誤,所以需要使用volatile來進(jìn)行修飾。

3、使用靜態(tài)內(nèi)部類
使用靜態(tài)內(nèi)部類也是懶漢式的方式之一,代碼如下

public class InnerClassSingleton {


    private static class InnerClass {
        private static InnerClassSingleton instance = new InnerClassSingleton();
    }

    private InnerClassSingleton() {
    }

    public static InnerClassSingleton getInstance() {
        return InnerClass.instance;
    }
}

只有當(dāng)?shù)谝淮握{(diào)用內(nèi)部類的時(shí)候,才會(huì)實(shí)例化該變量,從而保證了單例性。

優(yōu)缺點(diǎn)

優(yōu)點(diǎn):
1、單例模式自己對(duì)外提供了唯一的實(shí)例,可以控制客戶的使用。
2、節(jié)約系統(tǒng)資源。
缺點(diǎn):
1、因?yàn)闆]有抽象層,擴(kuò)展性較差。
2、違背單一職責(zé),該類既創(chuàng)建對(duì)象又有業(yè)務(wù)方法,將對(duì)象的創(chuàng)建和使用耦合在了一起。
3、狀態(tài)丟失。如果實(shí)例出來的對(duì)象長(zhǎng)期不使用,會(huì)被垃圾回收,下次會(huì)創(chuàng)建出和之前不同的對(duì)象。文章來源地址http://www.zghlxwxcb.cn/news/detail-495913.html

到了這里,關(guān)于設(shè)計(jì)模式篇---單例模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【設(shè)計(jì)模式】單例模式|最常用的設(shè)計(jì)模式

    【設(shè)計(jì)模式】單例模式|最常用的設(shè)計(jì)模式

    單例模式是最常用的設(shè)計(jì)模式之一,雖然簡(jiǎn)單,但是還是有一些小坑點(diǎn)需要注意。本文介紹單例模式并使用go語言實(shí)現(xiàn)一遍單例模式。 單例模式保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)。 使用場(chǎng)景: 當(dāng)類只能有一個(gè)實(shí)例而且可以從一個(gè)公開的眾所周知的訪

    2024年04月29日
    瀏覽(31)
  • 設(shè)計(jì)模式之單例設(shè)計(jì)模式

    就是一個(gè)類只允許創(chuàng)建一個(gè)對(duì)象,那么我們稱該類為單例類,這種設(shè)計(jì)模式我們稱為單例模式。 資源共享:有些類擁有共享的資源,例如數(shù)據(jù)庫(kù)連接池、線程池、緩存等。使用單例模式確保只有一個(gè)實(shí)例,避免資源浪費(fèi)和競(jìng)爭(zhēng)條件。 線程安全:?jiǎn)卫J娇梢杂脕肀WC多線程

    2024年02月07日
    瀏覽(29)
  • 設(shè)計(jì)模式 ~ 單例模式

    單例模式:指在確保一個(gè)類只有一個(gè)實(shí)例,創(chuàng)建之后緩存以便繼續(xù)使用,并提供一個(gè)全局訪問點(diǎn)來訪問該實(shí)例; 前端對(duì)于單例模式不常用,但對(duì)于單例的思想無處不在; 如:彈窗、遮罩層、登錄框、vuex redux 中的 store; 閉包: 模塊化:

    2024年02月16日
    瀏覽(38)
  • 設(shè)計(jì)模式-單例模式

    ? ? ? 單例模式(Singleton Pattern)是設(shè)計(jì)模式中最簡(jiǎn)單且最常用的一種創(chuàng)建型模式,其目的是保證一個(gè)類在整個(gè)系統(tǒng)中只存在一個(gè)實(shí)例,并提供全局訪問點(diǎn)來獲取這個(gè)唯一實(shí)例。這種模式主要適用于那些需要頻繁實(shí)例化然后又希望避免因?yàn)槎啻螌?shí)例化而消耗過多資源或產(chǎn)生副

    2024年01月17日
    瀏覽(25)
  • 設(shè)計(jì)模式——單例模式

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

    確保某一個(gè)類只有一個(gè)實(shí)例,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。 即保證一個(gè)類只有一個(gè)實(shí)例,并且提供一個(gè)全局訪問點(diǎn) 優(yōu)點(diǎn) 單例對(duì)象在內(nèi)存中只有一個(gè)實(shí)例,減少了內(nèi)存的開支。尤其對(duì)于一個(gè)頻繁創(chuàng)建、銷毀的對(duì)象時(shí),單例模式的優(yōu)勢(shì)就更明顯。 減少系統(tǒng)的性能

    2024年02月16日
    瀏覽(34)
  • 【設(shè)計(jì)模式-單例模式】

    【設(shè)計(jì)模式-單例模式】

    在一個(gè)項(xiàng)目中的全局范圍內(nèi), 一個(gè)類 有且僅有一個(gè)實(shí)例對(duì)象 。這個(gè)唯一的實(shí)例對(duì)象給其他模塊提供數(shù)據(jù)的 全局訪問 。這樣的模式就叫 單例模式 。 單例模式的典型例子就是任務(wù)隊(duì)列。 首先, 考慮單例模式的要求為有且僅有一個(gè)實(shí)例對(duì)象。那么就先從構(gòu)造函數(shù)入手。類的構(gòu)

    2024年02月13日
    瀏覽(31)
  • 設(shè)計(jì)模式(單例模式)

    ????????保證指定的類只有一個(gè)實(shí)例,不能創(chuàng)建出其他的實(shí)例 ? ? ? ? ? ? ? ? 1.1 代碼展示 ? ? ? ? ? ? ? ? 1.2 Singleton類中instance對(duì)象的創(chuàng)建時(shí)機(jī) ????????????????Singleton類中instance對(duì)象的創(chuàng)建時(shí)機(jī):在Singleton類被jvm加載的時(shí)候創(chuàng)建,Singleton類會(huì)在第一次使用的時(shí)

    2024年02月15日
    瀏覽(31)
  • 設(shè)計(jì)模式_單例模式

    保證該類只有一個(gè)實(shí)例( static私有變量 ),并提供一個(gè)訪問的它的全部訪問點(diǎn)( getInstance() 方法 ),該單例可以被所有程序模塊共享. 1)此類不可被復(fù)制. 2)此類不可被公開構(gòu)造. 也就是說,在c++中,它的 構(gòu)造函數(shù),拷貝構(gòu)造函數(shù),賦值函數(shù) 不能被公開調(diào)用. 個(gè)人理解,“懶漢式”,那一定很

    2024年02月12日
    瀏覽(28)
  • 設(shè)計(jì)模式一(單例模式)

    主要思路:將構(gòu)造方法私有化,并對(duì)外提供一個(gè)static的方法來創(chuàng)建對(duì)象 缺點(diǎn):一開始就創(chuàng)建對(duì)象,占用系統(tǒng)資源 單線程下不會(huì)出現(xiàn)問題,但多線程會(huì)會(huì)有并發(fā)問題,main方法的測(cè)試結(jié)果: 會(huì)發(fā)生同一時(shí)間創(chuàng)建了多個(gè)對(duì)象,所以出現(xiàn)了DCL雙重檢索 可以實(shí)現(xiàn)延遲實(shí)例化,并且是

    2024年01月23日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包