欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java設(shè)計(jì)模式之單例設(shè)計(jì)模式解析

 更新時(shí)間:2023年11月29日 09:59:56   作者:時(shí)代&信念  
這篇文章主要介紹了Java設(shè)計(jì)模式之單例設(shè)計(jì)模式解析,設(shè)計(jì)模式是在大量的實(shí)踐中總結(jié)和理論化之后優(yōu)選的代碼結(jié)構(gòu)、編程風(fēng)格、以及解決問題的思考方式,設(shè)計(jì)模式免去我們自己再思考和摸索,需要的朋友可以參考下

什么是設(shè)計(jì)模式?

設(shè)計(jì)模式是在大量的實(shí)踐中總結(jié)和理論化之后優(yōu)選的代碼結(jié)構(gòu)、編程風(fēng)格、以及解決問題的思考方式。設(shè)計(jì)模式免去我們自己再思考和摸索。

就像是經(jīng)典的棋譜,不同的棋局,我們用不同的棋譜、“套路”。

經(jīng)典的設(shè)計(jì)模式共有23種。每個(gè)設(shè)計(jì)模式均是特定環(huán)境下特定問題的處理方法。

在這里插入圖片描述

什么是單例設(shè)計(jì)模式?

就像它的名字一樣,只能存在一個(gè)對象實(shí)例,所以叫單例模式。

所謂類的單例設(shè)計(jì)模式,就是采取一定的方法保證在整個(gè)的軟件系統(tǒng)中,對某個(gè)類只能存在一個(gè)對象實(shí)例,并且該類只提供一個(gè)取得其對象實(shí)例的方法。

實(shí)現(xiàn)思路

如果我們要讓類在一個(gè)虛擬機(jī)中只能產(chǎn)生一個(gè)對象,我們首先必須將類的構(gòu)造器的訪問權(quán)限設(shè)置為private,這樣,就不能用new操作符在類的外部產(chǎn)生類的對象了,但在類內(nèi)部仍可以產(chǎn)生該類的對象。

因?yàn)樵陬惖耐獠块_始還無法得到類的對象,只能調(diào)用該類的某個(gè)靜態(tài)方法以返回類內(nèi)部創(chuàng)建的對象,靜態(tài)方法只能訪問類中的靜態(tài)成員變量,所以,指向類內(nèi)部產(chǎn)生的該類對象的變量也必須定義成靜態(tài)的。

餓漢式

class Singleton {
    // 1.私有化構(gòu)造器
    private Singleton() {
    }

    // 2.內(nèi)部提供一個(gè)當(dāng)前類的實(shí)例
    // 4.此實(shí)例也必須靜態(tài)化
    private static Singleton single = new Singleton();

    // 3.提供公共的靜態(tài)的方法,返回當(dāng)前類的對象
    public static Singleton getInstance() {
        return single;
    }
}

懶漢式

class Singleton {
    // 1.私有化構(gòu)造器
    private Singleton() {
    }
    // 2.內(nèi)部提供一個(gè)當(dāng)前類的實(shí)例
    // 4.此實(shí)例也必須靜態(tài)化
    private static Singleton single;
    // 3.提供公共的靜態(tài)的方法,返回當(dāng)前類的對象
    public static Singleton getInstance() {
        if(single == null) {
            single = new Singleton();
        }
        return single;
    }
}

兩種方式的對比

餓漢式:

特點(diǎn):立即加載,即在使用類的時(shí)候已經(jīng)將對象創(chuàng)建完畢。

優(yōu)點(diǎn):實(shí)現(xiàn)起來簡單;沒有多線程安全問題。

缺點(diǎn):當(dāng)類被加載的時(shí)候,會初始化static的實(shí)例,靜態(tài)變量被創(chuàng)建并分配內(nèi)存空間,從這以后,這個(gè)static的實(shí)例便一直占著這塊內(nèi)存,直到類被卸載時(shí),靜態(tài)變量被摧毀,并釋放所占有的內(nèi)存。因此在某些特定條件下會耗費(fèi)內(nèi)存。

懶漢式:

特點(diǎn):延遲加載,即在調(diào)用靜態(tài)方法時(shí)實(shí)例才被創(chuàng)建。

優(yōu)點(diǎn):實(shí)現(xiàn)起來比較簡單;當(dāng)類被加載的時(shí)候,static的實(shí)例未被創(chuàng)建并分配內(nèi)存空間,當(dāng)靜態(tài)方法第一次被調(diào)用時(shí),初始化實(shí)例變量,并分配內(nèi)存,因此在某些特定條件下會節(jié)約內(nèi)存。

缺點(diǎn):在多線程環(huán)境中,這種實(shí)現(xiàn)方法是完全錯(cuò)誤的,線程不安全,根本不能保證單例的唯一性。

到此這篇關(guān)于Java設(shè)計(jì)模式之單例設(shè)計(jì)模式解析的文章就介紹到這了,更多相關(guān)Java單例設(shè)計(jì)模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java面試題沖刺第四天--數(shù)據(jù)庫

    Java面試題沖刺第四天--數(shù)據(jù)庫

    這篇文章主要為大家分享了最有價(jià)值的三道數(shù)據(jù)庫面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 2021年最新Redis面試題匯總(1)

    2021年最新Redis面試題匯總(1)

    在程序員面試過程中redis相關(guān)的知識是常被問到的話題。這篇文章主要介紹了幾道Redis面試題,整理一下分享給大家,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 使用Spring RestTemplate 詳解實(shí)踐使用及拓展增強(qiáng)

    使用Spring RestTemplate 詳解實(shí)踐使用及拓展增強(qiáng)

    這篇文章主要介紹了使用Spring RestTemplate 詳解實(shí)踐使用及拓展增強(qiáng),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java中?!=null?的判斷

    Java中?!=null?的判斷

    空指針異常是出現(xiàn)頻率比較高的bug,在出現(xiàn)空指針時(shí),很多小伙伴都是習(xí)慣性地加一個(gè)?!=null?的判斷,本文就來介紹一下如何使用,給感興趣的可以了解下
    2025-02-02
  • Spring Boot2+JPA之悲觀鎖和樂觀鎖實(shí)戰(zhàn)教程

    Spring Boot2+JPA之悲觀鎖和樂觀鎖實(shí)戰(zhàn)教程

    這篇文章主要介紹了Spring Boot2+JPA之悲觀鎖和樂觀鎖實(shí)戰(zhàn)教程,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • JAVA定義變量與輸出詳解

    JAVA定義變量與輸出詳解

    這篇文章主要介紹了JAVA定義變量與輸出詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Java transient關(guān)鍵字與序列化操作實(shí)例詳解

    Java transient關(guān)鍵字與序列化操作實(shí)例詳解

    這篇文章主要介紹了Java transient關(guān)鍵字與序列化操作,結(jié)合實(shí)例形式詳細(xì)分析了java序列化操作相關(guān)實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • MybatisPlus使用注解的多對多級聯(lián)查詢方式

    MybatisPlus使用注解的多對多級聯(lián)查詢方式

    這篇文章主要介紹了MybatisPlus使用注解的多對多級聯(lián)查詢方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 詳解spring+springmvc+mybatis整合注解

    詳解spring+springmvc+mybatis整合注解

    本篇文章主要介紹了詳解spring+springmvc+mybatis整合注解,詳細(xì)的介紹了ssm框架的使用,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-04-04
  • JAVA如何讀取Excel數(shù)據(jù)

    JAVA如何讀取Excel數(shù)據(jù)

    這篇文章主要介紹了JAVA如何讀取Excel數(shù)據(jù),幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-09-09

最新評論