Java設計模式之單例模式(Singleton)

2021-09-08 11:53:41 字數 1901 閱讀 5443

前言:

在總結okhttp的時候,為了管理網路請求使用到了單例模式,晚上實在沒啥狀態了,靜下心來學習總結一下使用頻率最高的設計模式單例模式。

單例模式:

單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。

單例特點:

單例分類:

1).懶漢單例

(1)非執行緒安全實現

public

class

singleton

private

static

singleton instance;

public

static

singleton getinstance()

return

instance;

}

}

(2)執行緒安全實現方式一  方法加同步 這種實現方式效率不高

public

class

singleton

private

static

singleton instance;

public

static

synchronized

singleton getinstance()

return

instance;

}

}

(3.)執行緒安全實現方式二 雙重檢查鎖定

public

class

singleton //

私有構造方法

public

static singleton getsingle()

} }

return single; //

返回建立好的物件

} }

2.)餓漢式單例類

餓漢式在類建立的同時就已經建立好乙個靜態的物件供系統使用,以後不再改變,所以天生是執行緒安全的。

public

class

singleton

private

final

static singleton instance = new

singleton();

private

static

singleton getinstance()

}

3.)內部類式單例類

內部類式中,實現了延遲載入,只有我們呼叫了getinstance(),才會建立唯一的例項到記憶體中.並且也解決了懶漢式中多執行緒的問題.解決的方式是利用了classloader的特性,既實現了執行緒安全,又避免了同步帶來的效能影響。

public

class

singleton

private

static

class

singletonholder()

private

static

singleton getinstance()

}

4.)列舉類單例

public

enum

singleton

}

5.)懶漢和餓漢區別

(1)初始化角度

餓漢就是類一旦載入,就把單例初始化完成,保證getinstance的時候,單例是已經存在的了,而懶漢比較懶,只有當呼叫getinstance的時候,才回去初始化這個單例

(2)執行緒安全角度

餓漢式天生就是執行緒安全的,可以直接用於多執行緒而不會出現問題,懶漢式本身是非執行緒安全的,需要自己實現執行緒安全的方法。

java設計模式之單例模式

單位面試題目中有一道關於單例模式的題目.大多數參加筆試的同事都會寫出getinstance這個函式,但是當我問起什麼情況下需要使用單例 單例具體有什麼好處的時候 static函式也可以構建唯一例項,為什麼還需要單例.從使用單例的經驗來看,如下場景下,個人感覺應該使用單例 1.如果需要構建乙個工具類,...

java設計模式 之 單例模式

單例模式 有些類在程式執行過程中只需要儲存乙個例項,比如檔案管理類,音訊管理類,那麼我們如何實現乙個單例類呢?有以下幾點 1 定義乙個靜態變數 2 建構函式私有化 3 提供乙個public 靜態方法,獲取這個例項 4 一定要做執行緒同步 public static class singleton p...

Java設計模式之單例模式

說到單例模式 大家一定非常熟悉 這是最常見也是設計模式中相對簡單 好理解的設計模式 今天就跟大家掰一掰單例模式 單例模式確保某個類只有乙個例項 應用場景 執行緒池 快取 等物件常常被設計成單例 然而單例分兩種 1 惡漢式 2 懶漢式 我們先來看下 惡漢式 public class singleton...