設計模式之建立型模式 單例模式

2021-08-21 11:02:39 字數 1746 閱讀 5710

單例模式,顧名思義就是只存在乙個類的例項,避免多例項造成的記憶體浪費。

public

class singletonpattern

private

static singletonpattern singleton = new singletonpattern();

public

static singletonpattern getinstance()

}

這種方式在類載入時就完成了初始化,基於類載入的模式,避免了執行緒同步的問題,但是沒有很好的控制載入的時機,可能會造成記憶體的浪費。

public

class singletonpattern

private

static singletonpattern singleton2 = null;

public

static singletonpattern getinstance2()

return singleton2;

}}

這種模式彌補了餓漢式的載入時機的把握,在第一次呼叫的時候去初始化,但是執行緒是不安全的的,為了解決執行緒多安全的問題,我們有了下面這中寫法。

public

class singletonpattern

private

static singletonpattern singleton3 = null;

private

static synchronized singletonpattern getinstance()

return singleton3;

}}

這種寫法處理了執行緒的安全問題,但是每次都會進行同步,降低了**的效率,造成不必要的開銷,所以是不建議使用的,用鎖的形式來保證執行緒安全是沒錯的,只是要考慮鎖的位置。

public

class singletonpattern

private

static

volatile singletonpattern singleton4 = null;

public

static singletonpattern getinstance() }}

return singleton4;

}}

首先是進行了兩次if判斷,第一次是為了不必要的同步操作,第二次是在物件為null的情況下,才初始化的。這裡用到的volatile關鍵字,會遮蔽jvm的一些優化操作,對效能會有一些降低,所以我們推薦下面這種寫法。

public

class singletonpattern

private

static

class singleton

public

static singletonpattern getinstance()

}

第一次載入singletonpattern類的時候,不會去初始化內部類,只有在呼叫getinstance()方法之後,才會載入內部類並且初始化靜態變數,並且也保證了執行緒的安全性。

單例模式只產生乙個例項,減少了記憶體的損耗,減少了效能的開銷,避免了對資源的多重占用,可以在全域性範圍上進行管理。

單例模式是不易擴充套件的,單例的方法不能生成子類的物件,必須要重寫單例類才可以;如果單例方法需要傳遞context的話,要小心記憶體洩漏的風險。

設計模式之建立型模式 單例模式

在單例模式下,乙個類負責建立自己的例項,且這個類只能建立乙個唯一的例項物件,外部可以直接訪問這個例項物件,單例模式常用於物件的建立。建立單例模式時,建構函式是私有的這樣才能保障,在外部無法建立類例項化物件。單列模式的優點 1 保證在記憶體中只有乙個當前類的例項化物件,減小記憶體的開銷 2 避免資源的...

設計模式之單例模式 建立型模式

簡介 單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。在計算機系統中,任務管理器 執行緒池 快取 日誌物件 對話方塊 印表機 顯示卡的驅動程式物件常被設計成單例。在專案當中,系統啟動讀取配置檔案就需要單例保證配置的一致性。要點與實現要點 實現實現單例模式方式 餓漢式 餓漢式單...

設計模式 建立型模式之單例模式

單例模式,顧名思義,用來保證乙個物件只能建立乙個例項,除此之外,它還提供了對例項的全域性訪問方法。單例模式的實現非常簡單,只由單個類組成。為確保單例例項的唯一性,所有的單例構造器都要被宣告為私有的 private 在通過靜態方法實現全域性訪問該單例例項。public class singleton ...