設計模式 單例模式

2021-10-02 13:56:09 字數 2160 閱讀 7903

序言

單例模式屬於建立型模式,當專案中某個物件在整個宣告週期中只需要建立乙個例項時可以使用單例模式。如:經常用到的物件,工具類物件,頻繁訪問資料庫或檔案的物件。單例模式一共有八種建立方式,這裡只介紹七種。

/*單例模式*/

//餓漢式(靜態變數)

/* * 優點:

* 寫法簡單,類裝載的時候就建立例項,避免了執行緒同步的問題。

* 缺點:

* 若一直沒有用過則會浪費記憶體。

* 注:

* 可以使用

*/class

singleton

//本類內部建立例項

private

final

static singleton instance =

newsingleton()

;//提供公用靜態方法返回例項

public

static singleton getinstance()

}//餓漢式(靜態**塊)

/* * 優缺點同上

*/class

singleton2

//在靜態**塊中建立例項

private

static singleton2 instance;

static

//提供公用靜態方法返回例項

public

static singleton2 getinstance()

}//懶漢式(執行緒不安全)

/* * 優點:

* 起到懶載入的作用。

* 缺點:

* 執行緒不安全。

* 注:實際開發中不建議使用

*/class

singleton3

private

static singleton3 instance;

//提供公用靜態方法,當使用時才建立例項

public

static singleton3 getinstance()

return instance;}}

//懶漢式(執行緒安全)

/* * 優點:

* 起到懶載入的作用,並且執行緒安全。

* 缺點:

* 每個執行緒在獲得例項時都需要同步,效率太低。

* 注:

* 開發中不建議使用。

*/class

singleton4

private

static singleton4 instance;

//提供公用靜態方法,當使用時才建立例項,使用同步**塊執行緒安全

public

static

synchronized singleton4 getinstance()

return instance;}}

//懶漢式雙重檢查

/* * 優點:

* 執行緒安全,懶載入,效率高。

* 注:

* 推薦使用

*/class

singleton5

//volatile關鍵字可以將修改立即更新到主存

private

static

volatile singleton5 instance;

//提供公用靜態方法,加入雙重檢查**,解決執行緒安全問題和懶載入問題

public

static singleton5 getinstance()

}}return instance;}}

//懶漢式(靜態內部類)

/* * 優點:

* 懶載入,執行緒安全。

* 注:

* 推薦使用

*/class

singleton6

//類在裝載時靜態內部類不會被裝載,當呼叫getinstance方法時,

//才會裝載靜態內部類,只會裝載一次且執行緒安全

private

static

class

singletoninstance

//提供公用靜態方法

public

static singleton6 getinstance()

}//列舉

/* * 執行緒安全,推薦使用

*/enum singleton7

}

設計模式 單例模式

單例模式 singleton pattern 是乙個比較簡單的模式,其定義如下 ensure a class has only one instance,and provide a golbal point of acess to it.確保某乙個類只有乙個例項,而且自行例項化並且向整個系統提供這個...

設計模式 單例模式

class testsingleton static public function instance return self testsingleton private function clone public function setsinvar sinvar public function ...

設計模式 單例模式

單例模式的目的是保證類在系統中只被例項化一次,由該唯一的例項來為系統提供服務.單例模式主要用於保證服務的統一,比如獲取統一的編號服務,模仿oracle的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...