JAVA 列舉單例模式及原始碼分析

2021-07-29 14:37:21 字數 1268 閱讀 2264

單例模式的實現有很多種,網上也分析了如今實現單利模式最好用列舉,好處不外乎三點:1.執行緒安全 2.不會因為序列化而產生新例項 3.防止反射攻擊

關於第一點執行緒安全,從反編譯後的類原始碼中可以看出也是通過類載入機制保證的,應該是這樣吧(解決)

關於第二點序列化問題,有一篇文章說列舉類自己實現了readresolve()方法,所以抗序列化,這個方法是當前類自己實現的(解決)

關於第三點反射攻擊,我有自己試著反射攻擊了以下,不過報錯了...看了下方的反編譯類原始碼,明白了,因為單例類的修飾是abstract的,所以沒法例項化。(解決)

以下是我寫的乙個列舉單例,以及其class檔案反編譯過後的類

列舉單例

public

enum singleton

@override

protected

void

write

() };

protected

abstract

void

read();

protected

abstract

void

write();

}

反編譯過後還原的類

public

abstract

class

singleton

extends

enum

protected

abstract

void

read();

protected

abstract

void

write();

public

static singleton values()

public

static singleton valueof

(string s)

singleton(string s, int i, singleton singleton)

public

static

final singleton instance;

private

static

final singleton enum$values;

static

protected

void

write

() };

enum$values = (new singleton );

}}

java基礎 單例模式,列舉型別

在類和物件的學習中,有一種類只能例項化一次,這種叫做單例模式 單例模式又分為兩種,一種是餓漢式單例模式,另一種是懶漢式單例模式,首先讓我們來看一下單例模式 單例模式又稱為singleton模式,指的是乙個類在jvm中只有乙個例項存在 餓漢式單例模式 對於乙個類,在例項化它的過程中採用private ...

php 單例模式詳細介紹及實現原始碼

什麼是單例模式 單例模式顧名思義,就是只有乙個例項。作為物件的建立模式,單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項,這個類我們稱之為單例類。單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。為什麼要使用ph...

單例模式之列舉單例

列舉也是餓漢式。列舉單例 問題1 列舉單例是如何限制例項個數的 反編譯後可以看到 就是我們列舉類的乙個靜態成員變數而已,單例項的 問題2 列舉單例在建立時是否有併發問題 沒有,因為它也是靜態成員變數,它的執行緒安全性也是在類載入階段完成的。那個時候不會有執行緒併發問題 問題3 列舉單例能否被反射破壞...