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

什么是單例模式

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

什么是單例模式

1. 單例(單個的實例)

  1. 所謂類的單例設(shè)計模式,就是采取一定的方法保證在整個的軟件系統(tǒng)中,對某個類只能存在一個對象實例,并且該類只提供一個取得其對象實例的方法。
  2. 單例模式有兩種方式:1) 餓漢式 2) 懶漢式

2. 單例模式應(yīng)用實例

演示餓漢式懶漢式單例模式的實現(xiàn)。

步驟如下:

  1. 構(gòu)造器私有化 =》 防止其他類直接 new
  2. 類的內(nèi)部創(chuàng)建對象
  3. 向外暴露一個靜態(tài)的公共方法。getInstance
  4. 代碼實現(xiàn)
package com.xjz.single_;

/**
 * 單例模式[餓漢式]
 * 1. 只要完成類加載,同步創(chuàng)建好對象, 即使用戶沒有調(diào)用 getInstance() 方法, 對象也會被創(chuàng)建。
 * 2. 餓漢式不存在線程安全問題
 */
public class SingleTon01 {
    public static void main(String[] args) {

        //GirlFriend girlFriend = new GirlFriend("小白");
        //GirlFriend girlFriend = new GirlFriend("小張");

        //通過方法可以獲取 gf 對象
        GirlFriend instance = GirlFriend.getInstance();
        System.out.println(instance); //GirlFriend{name='小紅紅'}

        GirlFriend instance2 = GirlFriend.getInstance();
        System.out.println(instance2); //GirlFriend{name='小紅紅'}

        System.out.println(instance == instance2); //true

//        System.out.println(GirlFriend.n1); //構(gòu)造器被調(diào)用 888

    }
}

//只有一個類,GirlFriend
//只能有一個女朋友
class GirlFriend{
    private String name;
    public static int n1 = 888;

    //為了能夠在靜態(tài)方法中,返回 gf對象,需要將其修飾為 static
    //對象,通常是重量級的對象,餓漢式可能造成了創(chuàng)建了對象,但是還沒有是試用
    public static GirlFriend gf = new GirlFriend("小紅紅");

    //如何保障我們只能創(chuàng)建一個 GirlFriend 對象
    //步驟[單例模式-餓漢式]
    //1. 將構(gòu)造器私有化
    //2. 在類的內(nèi)部直接創(chuàng)建對象(該對象是 static)
    //3. 提供一個公共的 static 方法,返回 gf 對象
    private GirlFriend(String name) {
        System.out.println("構(gòu)造器被調(diào)用");
        this.name = name;
    }
    
	//靜態(tài)的公共方法,用來返回對象
    public static GirlFriend getInstance(){
        return gf;
    }

    @Override
    public String toString() {
        return "GirlFriend{" +
                "name='" + name + '\'' +
                '}';
    }
}

package com.xjz.single_;

/**
 * 演示懶漢式的單例模式
 * 懶漢式,只有當(dāng)用戶使用 getInstance 時,才返回 cat對象,后面再次調(diào)用時,會返回上次創(chuàng)建的 cat對象
 * 懶漢式存在線程安全問題
 */
public class SingleTon02 {
    public static void main(String[] args) {

        System.out.println(Cat.n1); //打印666,且不會調(diào)用構(gòu)造器(創(chuàng)建cat對象)
        Cat instance = Cat.getInstance();
        System.out.println(instance);//構(gòu)造器調(diào)用,創(chuàng)建cat對象

    }
}

//希望在程序運行過程中,只能創(chuàng)建一個 Cat 對象
//使用單例模式
class Cat{
    private String name;
    public static int n1 = 666;
    private static Cat cat; //默認是 null

    //步驟
    //1. 仍然構(gòu)造器私有化
    //2. 定義一個 static 靜態(tài)屬性對象
    //3. 提供一個 public 的 static 方法,可以返回一個 Cat對象
    //4. 懶漢式,只有當(dāng)用戶使用 getInstance 時,才返回 cat對象,后面再次調(diào)用時,會返回上次創(chuàng)建的 cat對象
    //  從而保證了單例
    private Cat(String name){
        System.out.println("構(gòu)造器調(diào)用...");
        this.name = name;
    }
    public static Cat getInstance(){
        if (cat == null){ //如果還沒有創(chuàng)建 cat對象
            cat = new Cat("小可愛");
        }
        return cat;
    }

    @Override
    public String toString() {
        return "Cat{" +
                "name='" + name + '\'' +
                '}';
    }
}

3. 餓漢式 VS 懶漢式

  1. 二者最主要的卻別在于創(chuàng)建對象的時機不同:餓漢式是在類加載就創(chuàng)建了對象實例,而懶漢式是在使用時才創(chuàng)建。
  2. 餓漢式不存在線程安全問題,懶漢式存在線程安全問題。
  3. 餓漢式存在浪費資源的可能,因為如果程序員一個對象實例都沒有使用,那么餓漢式創(chuàng)建的對象就浪費了,懶漢式是使用時才創(chuàng)建,所以就不存在這個問題。
  4. 在我們 javaSE標(biāo)準(zhǔn)類中,java.lang.Runtime 就是經(jīng)典的單例模式[餓漢式]

什么是單例模式,設(shè)計模式,單例模式,javascript,開發(fā)語言文章來源地址http://www.zghlxwxcb.cn/news/detail-660105.html

到了這里,關(guā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)文章

  • 什么是單例模式,如何在Java中實現(xiàn)單例?

    單例模式是一種創(chuàng)建對象的設(shè)計模式,它確保只有一個實例,并提供對該實例的全局訪問點。在Java中實現(xiàn)單例有懶漢式和餓漢式兩種方式。 懶漢式單例模式: 在懶漢式單例模式中,對象創(chuàng)建在第一次使用時才會被創(chuàng)建。例如,當(dāng)某個類第一次被實例化時,JVM會在堆內(nèi)存中分

    2024年02月15日
    瀏覽(25)
  • 單例模式類設(shè)計|什么是餓漢模式和懶漢模式

    那么這里博主先安利一些干貨滿滿的專欄了! 首先是博主的高質(zhì)量博客的匯總,這個專欄里面的博客,都是博主最最用心寫的一部分,干貨滿滿,希望對大家有幫助。 高質(zhì)量干貨博客匯總 https://blog.csdn.net/yu_cblog/category_12379430.html?spm=1001.2014.3001.5482 一個類只能創(chuàng)建一個對象,

    2024年02月16日
    瀏覽(26)
  • 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)
  • 【JAVA】Java 中什么叫單例設(shè)計模式?請用 Java 寫出線程安全的單例模式

    【JAVA】Java 中什么叫單例設(shè)計模式?請用 Java 寫出線程安全的單例模式

    ?? 個人博客: 個人主頁 ?? 個人專欄: JAVA ???? 功不唐捐,玉汝于成 目錄 前言 正文 懶漢式(Lazy Initialization): 雙重檢查鎖定(Double-Checked Locking): 結(jié)語 我的其他博客 在軟件設(shè)計中,單例設(shè)計模式是一種重要的設(shè)計思想,它確保了一個類只有一個實例,并提供了一

    2024年01月15日
    瀏覽(23)
  • DCL 單例模式設(shè)計為什么需要 volatile 修飾實例對象

    DCL 單例模式設(shè)計為什么需要 volatile 修飾實例對象

    ?DCL 問題,是在基于雙重檢查鎖設(shè)計下的單例模式中,存在不 完整對象的問題。而這個不完整對象的本質(zhì),是因為指令重排序?qū)е碌摹?當(dāng)我們使用 instance=new DCLExample()構(gòu)建一個實例對象的時候,因為 new 這個操作并不是原子的。所以這段代碼最終會被編譯成 3 條指令: 為對象

    2024年02月08日
    瀏覽(31)
  • 實際開發(fā)中常用的設(shè)計模式--------單例模式(知識跟業(yè)務(wù)場景結(jié)合)-----小白也能看懂(通俗易懂版本)

    1.定義 單例模式是一種創(chuàng)建型設(shè)計模式,它通過使用私有構(gòu)造函數(shù)和靜態(tài)方法來確保一個類只有一個實例,并且提供全局訪問點來獲取該實例。 通過使用單例模式,我們可以方便地管理全局唯一的對象實例,并且避免了多次創(chuàng)建相同類型的對象所帶來的資源浪費問題 2.業(yè)務(wù)場

    2024年02月12日
    瀏覽(29)
  • 113、單例Bean是單例模式嗎?

    113、單例Bean是單例模式嗎?

    通常來說,單例模式是指在一個JVM中,一個類只能構(gòu)造出來一個對象,有很多方法來實現(xiàn)單例模式,比如懶漢模式,但是我們通常講的單例模式有一個前提條件就是規(guī)定在一個JVM中,那如果要在兩個JVM中保證單例呢?那可能就要用分布式鎖這些技術(shù),這里的重點是,我們在討

    2024年02月14日
    瀏覽(19)
  • 懶漢單例設(shè)計模式與餓漢單例設(shè)計模式

    單例模式即一個類確保只有一個對象,主要用于避免浪費內(nèi)存 1 .餓漢單例設(shè)計模式 :拿到對象時,對象就早已經(jīng)創(chuàng)建好了 寫法: 把類的構(gòu)造器私有 在類中自己創(chuàng)建一個對象,并賦值到一個變量 定義一個靜態(tài)方法,返回自己創(chuàng)建的這個對象 2. 懶漢單例設(shè)計模式 :第一次拿到對象時

    2024年02月21日
    瀏覽(31)
  • 【設(shè)計模式】單例設(shè)計模式

    目錄 1、前言 2、基本語法 2.1、懶漢式單例 2.2、餓漢式單例 2.3、雙重檢驗鎖單例模式 2.4、靜態(tài)內(nèi)部類單例模式 2.5、枚舉單例模式 2.6、ThreadLocal單例模式 2.7、注冊單例模式 3、使用場景 4、使用示例 5、常見問題 5、總結(jié) 單例模式是一種設(shè)計模式,它確保一個類只能創(chuàng)建一個實

    2024年02月09日
    瀏覽(29)
  • 設(shè)計模式學(xué)習(xí)(一)單例模式補充——單例模式析構(gòu)

    設(shè)計模式學(xué)習(xí)(一)單例模式補充——單例模式析構(gòu)

    目錄 前言 無法調(diào)用析構(gòu)函數(shù)的原因 改進方法 內(nèi)嵌回收類 智能指針 局部靜態(tài)變量 參考文章 在《單例模式學(xué)習(xí)》中提到了,在單例對象是通過 new 動態(tài)分配在堆上的情況下,當(dāng)程序退出時,不會通過C++的RAII機制自動調(diào)用其析構(gòu)函數(shù)。本文討論一下這種現(xiàn)象的原因以及

    2024年03月19日
    瀏覽(34)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包