溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java的單例模式有什么優(yōu)缺點

發(fā)布時間:2020-06-24 11:37:53 來源:億速云 閱讀:197 作者:Leah 欄目:編程語言

今天就跟大家聊聊有關java的單例模式有什么優(yōu)缺點,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

一.什么是單例模式

單例模式(Singleton Pattern)是 Java 中最簡單的設計模式之一。單例模式就是: 在程序運行期間, 某些類有且最多只有一個實例對象。這種模式涉及到一個單一的類,該類負責創(chuàng)建自己的對象,同時確保只有單個對象被創(chuàng)建。這個類提供了一種訪問其唯一的對象的方式,可以直接訪問,不需要實例化該類的對象。

二.單例模式的實現(xiàn)思路

1、靜態(tài)化實例對象, 讓實例對象與Class對象互相綁定, 通過Class類對象就可以直接訪問;

2、私有化構造方法, 禁止通過構造方法創(chuàng)建多個實例;

3、提供一個公共的靜態(tài)方法, 用來返回這個類的唯一實例。

三.單例模式的優(yōu)缺點

優(yōu)點:

1、在內(nèi)存里只有一個實例,減少了內(nèi)存的開銷,尤其是頻繁的創(chuàng)建和銷毀實例。

2、避免對資源的多重占用。

缺點:

沒有接口,不能繼承,與單一職責原則沖突,一個類應該只關心內(nèi)部邏輯,而不關心外面怎么樣來實例化。

四.單例模式的幾種不同寫法

1、懶漢式

package com.yx.singleton;
 
/**
 * Singleton
 * <p>初級原型-懶漢式</>
 * <p>優(yōu)點:用到時再初始化</>
 * <p>缺點:并發(fā)下會產(chǎn)生多個實例</>
 * <p>不推薦</>
 *
 * @author yx
 * @date 2019/11/24 12:18
 */
public class Singleton {
 
    /**
     * 靜態(tài)化實例對象
     */
    private static Singleton sInstance = null;
 
    /**
     * 私有構造方法
     */
    private Singleton() {
    }
 
    /**
     * 提供一個公共的靜態(tài)方法, 用來返回這個類的唯一實例.
     *
     * @return 單例對象
     */
    public static Singleton getInstance() {
        if (sInstance == null) {
            sInstance = new Singleton();
        }
        return sInstance;
    }
}

上面這種寫法,在并發(fā)環(huán)境下,會出現(xiàn)多個實例,線程不安全。

枚舉方式

/**
 * EnumSingleton
 * 枚舉類單例模式
 *
 * <p>優(yōu)點:不需要考慮序列化的問題;不需要考慮反射的問題</>
 * <p>缺點:所有的屬性都必須在創(chuàng)建時指定, 也就意味著不能延遲加載; 并且使用枚舉時占用的內(nèi)存比靜態(tài)變量的2倍還多</>
 *
 * @author yx
 * @date 2019/11/24 15:09
 */
public enum EnumSingleton {
    INSTANCE
}

看完上述內(nèi)容,你們對java的單例模式有進一步的了解嗎?如果還想了解更多知識或者相關內(nèi)容,請關注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI