設計模式 單例模式 全

2021-10-18 03:10:28 字數 3096 閱讀 8222

就是採取一定的方法保證在整個的軟體系統中,對某個類只能存在乙個物件例項,並且該類只提供乙個取得其物件例項的方法.

1.餓漢式(靜態常量)

//餓漢式(靜態常量)

public

class

singletontest1

}class

singleton

// 構造器私有化

// 3.對外提供乙個公有的靜態方法,返回例項物件

public

static singleton getinstance()

}

1. 構造器私有化(防止new)

2. 類的內部建立物件

3. 向外暴露乙個靜態的公共方法:getinstance

4. **實現

優點:寫法簡單,在類裝載的時候就完成了例項化,避免了執行緒同步問題

缺點:在類裝載的時候就完成例項化,沒有達到lazy loading的效果。如果從始至終沒有使用這個例項就會造成記憶體浪費

結論:這種單例模式可用,可能會造成記憶體浪費

2.餓漢式模式(靜態**塊)

// 1.構造器私有化,外部不能new

private

singleton()

// 2.本類內部建立物件例項

private

static singleton instance;

static

// 3.對外提供乙個公有的靜態方法,返回例項物件

public

static singleton getinstance()

}

結論:這種單例模式可用,但是可能造成記憶體的浪費

3.懶漢模式(執行緒不安全)

class

singleton

// 提供乙個靜態的公有方法,當使用到該方法時,才去建立instance

// 即懶漢模式

public

static singleton getinstance()

return instance;

}}

優點:

1.起到了lazy loading的效果,但是只能在單執行緒下使用

2.如果在多執行緒下,乙個執行緒進入了if(singleton==null)判斷語句塊,還未來得及往下執行,另乙個執行緒也通過了這個判斷語句,這時會產生多個例項,所以在多執行緒環境下不可使用這種方式

結論:在實際開發中,不要使用這種方式

4.懶漢式(執行緒安全,同步方法)

class

singleton

// 提供乙個靜態的公有方法,當使用到該方法時,才去建立instance

// 即懶漢模式

//加上synchronized確保執行緒同步

public

static

synchronized singleton getinstance()

return instance;

}}

解決了執行緒不安全的問題,但是執行效率太低了。

總結:在實際開發中,不推薦使用這種方式

5.懶漢式(執行緒安全,同步**快)

6.雙重檢查

class

singleton

// 提供乙個靜態的公有方法,加入雙重檢查**,解決執行緒安全問題,同時解決懶載入問題

public

static

synchronized singleton getinstance()

}}return instance;

}}

優缺點說明:

1.double-check 概念是多執行緒開發中常使用到的,如**塊中所示,我們進行了兩次if(singleton==null)檢查,這樣就可以保證執行緒安全了

2.這樣,例項化**只用執行一次

3.執行緒安全:延遲載入:效率也高

7.靜態內部類

class

singleton

//寫下乙個靜態內部類,該類中有乙個靜態屬性singleton

private

static

class

singletoninstance

// 提供乙個靜態的公有方法,直接返回singletoninstance.instance

public

static singleton getinstance()

}

優缺點:

1.這種方式採用了類裝載的機制保證了初始化例項時只有乙個執行緒

2.靜態內部類方式在singleton類被裝載時不會立即例項化,而是在需要時才例項化,呼叫getinstance方法,才會裝載singletoninstance類,從而完成singleton的例項化

3.類的靜態屬性只會在第一次載入類的時候初始化,所以在這裡,jvm幫助我們保證了執行緒的安全性,在類初始化時,別的執行緒是無法進入的

4.優點:避免了執行緒不安全,利用了靜態內部類特點實現延遲載入,效率高

8.列舉

public

class

singletontest1

}enum singleton

優缺點:借用jdk1.5新增的列舉來實現單例模式.不僅能避免多執行緒同步問題,而且能防止反序列化重新建立新的物件

結論:推薦使用

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

當想例項化乙個單例類的時候,必須記得使用相應獲取物件的方法,而不是使用new

使用場景:需要頻繁的進行建立和銷毀的物件,建立物件耗時過多或者耗費資源過多,但又經常要用到的物件,工具類物件,頻繁訪問資料庫或者檔案的物件(不如資料來源,session工廠)

總結:採取一定的方法保證在整個的軟體系統中,對某個類只存在乙個物件例項,並且該類只提供乙個取得其物件例項的方法(靜態方法)

設計模式 單例模式

單例模式 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的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...