設計模式之 單例模式

2021-09-13 19:16:08 字數 1901 閱讀 9404

1、單例模式概要

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

單例模式確保系統在執行過程中只會存在乙個例項,當遇到需要頻繁建立物件或者建立物件會花費較多資源的時候,使用單例模式就尤為重要

單例模式可以解決全域性變數的一些缺點,比如可以延遲載入,保證只在使用這個類的時候才建立物件,而不是像全域性變數一樣在一開始就建立完成

tips:單例模式的構造器必須是私有的

2、單例模式的寫法

1)餓漢式單例(立即載入,執行緒安全)

public

class

singleon1

private

static singleon1 singleon1 =

newsingleon1()

;public

static singleon1 getsingleon1()

}

餓漢式單例在程式一開始載入時,就把單例變數建立完畢,餓漢式單例是為了防止執行緒不安全所開發的一種模式(主要就是為了解決懶漢式單例的執行緒不同步的問題)

2)懶漢式單例(延遲載入,執行緒不安全)

public

class

singleon2

private

static singleon2 singleon2 = null;

public

static singleon2 getinstance()

return singleon2;

}}

懶漢式單例,是最常見的單例模式,但是會出現在多執行緒下不同步的問題,針對這種情況有兩種解決方案,一是使用餓漢式,另一種則是在**中加入執行緒同步的關鍵字

3)懶漢式單例-synchronized(延遲載入,執行緒安全)

public

class

singleon3

private

static singleon3 singleon3 = null;

public

static singleon3 getinstance()

}return singleon3;

}}

4)懶漢式單例-雙重檢查(延遲載入,執行緒安全)

public

class

singleon4

private

volatile

static singleon4 singleon4 = null;

private

static singleon4 getinstance()

}return singleon4;

}}

利用volatile和synchronized進行雙重檢查,只有第一次執行的時候會執行同步**塊,大大提高了單例模式的效率

5)內部靜態類單例(執行緒安全,但是序列化不安全)

public

class

singleon5

private

static

class

innerobject

public

static singleon5 getinstance()

}

雖然執行緒安全,但是序列化不安全(存疑)

3、單例模式總結

系統記憶體中該類只存在乙個物件,節省了系統資源,對於一些需要頻繁建立銷毀的物件,使用單例模式可以提高系統效能。

總的來說單例模式可以完全替代全域性變數,使**更清晰。

設計模式之單例模式

前一段時間買了一本秦小波寫的 設計模式之禪 網上對這書的評價很高。現在還沒有看很多,但是有些地方頗有感觸,也並不是所有的地方都能看懂,但是會慢慢研究的。自己對於設計模式的感覺就是乙個字 牛!感覺會23種設計模式並且會熟練運用的人,真的就是大師級的牛人了,設計模式是乙個專案主管或者架構師一定要會的東西...

設計模式之單例模式

package com.xie.singleton public class singleton 提供乙個共有的靜態的入口方法 public static singleton getinstance 懶漢式 延遲載入 提供乙個私有的靜態的成員變數,但不做初始化 private static sing...

設計模式之 單例模式

單例模式 singleton 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式 單件模式 使用方法返回唯一的例項 public class singleton private static singleton instance public static singleton geti...