23種設計模式之建立型模式 5 單例模式

2021-08-16 22:54:21 字數 2227 閱讀 1317

單例設計模式可以分為;

懶漢式餓漢式雙重檢測鎖

靜態內部類列舉

下面是詳細介紹:

public

class

singleton

public

static

singleton getinstance()

}

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

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

public

class

singleton

private

static

singleton instance;

public

static

synchronized

singleton getinstance()

return

instance;

}}

這種方式和上面的方式其實類似,只不過將類例項化的過程放在了靜態**塊中,也是在類裝載的時候,就執行靜態**塊中的**,初始化類的例項。優缺點和上面是一樣的。

public

class

singleton

public

static

singleton getinstance() }}

return

singleton;

}}

double-check概念對於多執行緒開發者來說不會陌生,如**中所示,我們進行了兩次if (singleton == null)檢查,這樣就可以保證執行緒安全了。這樣,例項化**只用執行一次,後面再次訪問時,判斷if (singleton == null),直接return例項化物件。

public

class

singleton

private

static

class

singletoninstance

public

static

singleton getinstance()

}

這種方式跟餓漢式方式採用的機制類似,但又有不同。兩者都是採用了類裝載的機制來保證初始化例項時只有乙個執行緒。不同的地方在餓漢式方式是只要singleton類被裝載就會例項化,沒有lazy-loading的作用,而靜態內部類方式在singleton類被裝載時並不會立即例項化,而是在需要例項化時,呼叫getinstance方法,才會裝載singletoninstance類,從而完成singleton的例項化。

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

優點:避免了執行緒不安全,延遲載入,效率高。

public

enum

singleton

}

使用方法;

singleton s1

=

singleton.

instance

;

singleton4 s2

=singleton

.

instance

;

if

(s7==

s8)

else

執行結果:

s1和s2是同乙個例項

;

借助jdk1.5中新增的列舉來實現單例模式。不僅能避免多執行緒同步問題,而且還能防止反序列化重新建立新的物件。可能是因為列舉在jdk1.5中才新增,所以在實際專案開發中,很少見人這麼寫過。

23種設計模式 建立型模式 單例模式

單例類只有乙個例項物件 該單例物件必須由單例類自行建立 單例類對外提供乙個訪問該單例的全域性訪問點。單例模式的優點 1.單例模式可以保證記憶體裡只有乙個例項,減少了記憶體的開銷。2.可以避免對資源的多重占用。3.單例模式設定全域性訪問點,可以優化和共享資源的訪問。單例模式的缺點 1.單例模式一般沒有...

23種設計模式總結之 建立型模式

建立型模式用來處理物件的建立過程,主要包含以下5 種設計模式 1,工廠方法模式 factory method pattern 的用意是定義乙個建立產品物件的工廠介面,將實際建立工作推遲到子類中。2,抽象工廠模式 abstract factory pattern 的意圖是提供乙個建立一系列相關或者相互...

23種設計模式 單例模式(5種)

常見應用場景 window中任務管理器就是典型的單例 window中 站 專案中,讀取配置檔案的類,一般也只有乙個物件,沒有必要每次使用配置檔案資料,每次new乙個物件去讀取 的計數器 保證同步 應用程式的日誌應用,資料庫連線池一般也是採用單例,因為資料庫連線也是一種資料庫資源 public cla...