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

單例模式的幾種實現(xiàn)方式

這篇具有很好參考價值的文章主要介紹了單例模式的幾種實現(xiàn)方式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在Java中,實現(xiàn)單例模式主要有幾種方式:懶漢式、餓漢式、雙重檢查鎖定、靜態(tài)內(nèi)部類和枚舉。每種方式都有其特點和適用場景。

1. 餓漢式(線程安全)

餓漢式是最簡單的一種實現(xiàn)方式,通過靜態(tài)初始化實例,保證了線程安全。但它不是懶加載模式,無法在實際使用時才創(chuàng)建實例。

public class Singleton {
    private static final Singleton instance = new Singleton();

    private Singleton() {}

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

2. 懶漢式(線程不安全)

懶漢式實現(xiàn)了懶加載,但在多線程情況下不能保證單例的唯一性。

public class Singleton {
    private static Singleton instance;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

3. 懶漢式(線程安全)

通過同步方法保證線程安全,但每次訪問時都需要同步,會影響性能。

public class Singleton {
    private static Singleton instance;

    private Singleton() {}

    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

4. 雙重檢查鎖定(DCL)

雙重檢查鎖定既保證了線程安全,又避免了每次訪問時的性能損失。

public class Singleton {
    private volatile static Singleton instance;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

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

使用靜態(tài)內(nèi)部類的方式實現(xiàn)懶加載,且由JVM保證線程安全。

public class Singleton {
    private static class SingletonHolder {
        private static final Singleton INSTANCE = new Singleton();
    }

    private Singleton() {}

    public static Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}

6. 枚舉

使用枚舉的方式是實現(xiàn)單例的最佳方法,不僅能避免多線程同步問題,還能防止反序列化重新創(chuàng)建新的對象。文章來源地址http://www.zghlxwxcb.cn/news/detail-828844.html

// 實現(xiàn)枚舉單例
public enum Singleton {
    INSTANCE; // 唯一的枚舉實例

    // 枚舉類中可以包含成員變量、方法等
    private int value;

    // 可以定義自己需要的操作,如設(shè)置、獲取枚舉實例的狀態(tài)等
    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }

    // 還可以定義其他方法
    public void show() {
        System.out.println("This is an enum singleton method.");
    }
}

// 使用枚舉單例
public class TestSingleton {
    public static void main(String[] args) {
        Singleton singleton = Singleton.INSTANCE;

        singleton.setValue(1);
        System.out.println(singleton.getValue());

        singleton.show();
    }
}

到了這里,關(guān)于單例模式的幾種實現(xiàn)方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 設(shè)計模式:干掉if else的幾種方法

    存在的問題: 如果業(yè)務(wù)邏輯過多 if else 可能要寫多達幾百行,這樣代碼可讀性很差,不利于尋找bug和理解代碼 如果if后面的判斷邏輯過長,則代碼可讀性不強 如果將其寫在一個核心代碼里面,則新增功能時需要修改核心代碼,要是不小心改到其他的代碼就涼涼了 當(dāng)業(yè)務(wù)邏輯

    2024年02月07日
    瀏覽(20)
  • 【Qt專欄】實現(xiàn)單例程序,禁止程序多開的幾種方式

    【Qt專欄】實現(xiàn)單例程序,禁止程序多開的幾種方式

    目錄 一,簡要介紹 二,實現(xiàn)示例(Windows) 1.使用系統(tǒng)級別的互斥機制 2.通過共享內(nèi)存(進程間通信-IPC) 3.使用命名互斥鎖(不推薦) 4.使用文件鎖 5.通過網(wǎng)絡(luò)端口檢測 前言 禁止程序多開,也稱為“單實例應(yīng)用程序”或“單例應(yīng)用程序”,是指通過各種手段防止同一個應(yīng)用

    2024年02月10日
    瀏覽(41)
  • 設(shè)計模式——單例模式8種實現(xiàn)

    1、了解概念: 單例模式是指采用一定的方法保證在整個軟件系統(tǒng)種,對某個類只能存在一個對象實例,并且該類只提供一個取得其對象實例的方法(靜態(tài)方法)。 個人理解:一個類只能實例化一個對象,其他的使用都是引用這個對象。 單例模式的八種實現(xiàn)方式 單例模式的

    2024年02月21日
    瀏覽(25)
  • 【開源與項目實戰(zhàn):開源實戰(zhàn)】82 | 開源實戰(zhàn)三(中):剖析Google Guava中用到的幾種設(shè)計模式

    【開源與項目實戰(zhàn):開源實戰(zhàn)】82 | 開源實戰(zhàn)三(中):剖析Google Guava中用到的幾種設(shè)計模式

    上一節(jié)課,我們通過 Google Guava 這樣一個優(yōu)秀的開源類庫,講解了如何在業(yè)務(wù)開發(fā)中,發(fā)現(xiàn)跟業(yè)務(wù)無關(guān)、可以復(fù)用的通用功能模塊,并將它們從業(yè)務(wù)代碼中抽離出來,設(shè)計開發(fā)成獨立的類庫、框架或功能組件。 今天,我們再來學(xué)習(xí)一下,Google Guava 中用到的幾種經(jīng)典設(shè)計模式:

    2024年02月11日
    瀏覽(38)
  • 設(shè)計模式:單例模式六種實現(xiàn)

    單例模式有多種實現(xiàn)方式,每種方式都有其設(shè)計思想、優(yōu)缺點以及適用的使用場景。以下是一些常見的單例實現(xiàn)方式: 1. 懶漢式(線程不安全) 設(shè)計思想 這種實現(xiàn)方式采用了類加載的懶加載機制來保證單例只在第一次使用時被創(chuàng)建。 實現(xiàn)代碼 優(yōu)缺點 優(yōu)點:延遲加載,只在

    2024年04月12日
    瀏覽(38)
  • Python入門【?編輯、組合、設(shè)計模式_工廠模式實現(xiàn) 、設(shè)計模式_單例模式實現(xiàn)、工廠和單例模式結(jié)合、異常是什么?異常的解決思路 】(十七)

    Python入門【?編輯、組合、設(shè)計模式_工廠模式實現(xiàn) 、設(shè)計模式_單例模式實現(xiàn)、工廠和單例模式結(jié)合、異常是什么?異常的解決思路 】(十七)

    ??作者簡介:大家好,我是愛敲代碼的小王,CSDN博客博主,Python小白 ??系列專欄:python入門到實戰(zhàn)、Python爬蟲開發(fā)、Python辦公自動化、Python數(shù)據(jù)分析、Python前后端開發(fā) ??如果文章知識點有錯誤的地方,請指正!和大家一起學(xué)習(xí),一起進步?? ??如果感覺博主的文章還不錯的

    2024年02月14日
    瀏覽(20)
  • 【設(shè)計模式】單例模式、“多例模式”的實現(xiàn)以及對單例的一些思考

    【設(shè)計模式】單例模式、“多例模式”的實現(xiàn)以及對單例的一些思考

    單例模式是設(shè)計模式中最簡單的一種,對于很多人來說,單例模式也是其接觸的第一種設(shè)計模式,當(dāng)然,我也不例外。這種設(shè)計模式在學(xué)習(xí)、面試、工作的過程中廣泛傳播,相信不少人在面試時遇到過這樣的問題:“說說你最熟悉的集中設(shè)計模式”,第一個脫口而出的就是單

    2024年02月07日
    瀏覽(25)
  • 設(shè)計模式——C++11實現(xiàn)單例模式(餓漢模式、懶漢模式),與單例的進程

    本文將介紹單例模式,使用C++11實現(xiàn)多個版本的單例模式,分析各自的優(yōu)缺點。最后提及如何實現(xiàn)一個單例的進程。 單例模式屬于創(chuàng)建型模式,提供了一種創(chuàng)建對象的方式。 單例模式確保一個類只有一個實例。通過一個類統(tǒng)一地訪問這個實例。 思想:將構(gòu)造函數(shù)設(shè)置為私有

    2024年02月09日
    瀏覽(22)
  • 【設(shè)計模式】23種設(shè)計模式——單例模式(原理講解+應(yīng)用場景介紹+案例介紹+Java代碼實現(xiàn))

    【設(shè)計模式】23種設(shè)計模式——單例模式(原理講解+應(yīng)用場景介紹+案例介紹+Java代碼實現(xiàn))

    介紹 所謂類的單例設(shè)計模式,就是采取一定的方法, 保證在整個的軟件系統(tǒng)中,對某個類只能存在一個對象實例 ,并且該類只提供一個取得其對象實例的方法(靜態(tài)方法)。 比如Hibernate的SessionFactory,它充當(dāng)數(shù)據(jù)存儲源的代理,并負責(zé)創(chuàng)建Session對象。SessionFactory并不是輕量

    2024年02月13日
    瀏覽(32)
  • 用Rust實現(xiàn)23種設(shè)計模式之單例

    話不多說,上代碼! 在這個例子中,我們使用了 Arc (原子引用計數(shù))和 Mutex (互斥鎖)來實現(xiàn)線程安全的單例。通過 get_instance 方法,我們可以獲取到單例實例,并對實例進行操作。 使用 lazy_static crate: lazy_static crate 是一個常用的 Rust crate,可以實現(xiàn)懶加載的全局靜態(tài)變量

    2024年02月14日
    瀏覽(27)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包