單例模式的幾種實現方式

2021-10-10 05:06:39 字數 1683 閱讀 1230

單例模式莫過於是我們最常用的設計模式之一了,它的優缺點就是「優也單例,缺也單例」,當然應用它方面優點還是較多些的,所以下面我們看看,常用的幾種實現方式有哪些吧。

這種是最基本的實現方式,最大的問題就是不支援多執行緒,由於沒有加鎖,嚴格上並不算單例模式。

public

class

singleton

public

static singleton getinstance()

return sigleton;

}}

這種方式具備很好的懶載入,能夠在多執行緒中很好的工作,但是,效率很低,由於加了sychronized鎖,就比較重,99%情況不需要同步。

public

class

singleton

public

static

synchronized singleton getinstance()

return singleton;

}}

這種方式比較常用,沒有加鎖,相較於加鎖的執行效率會提高,但是這種方式會在類裝載時就例項化,而導致類裝載的原因有很多種:命令列啟動應用的時候由jvm初始化載入、通過class.forname()方法動態載入、通過classloader.loadclass()方法動態載入,所以可能在我們沒有用到該類時就被載入,會對記憶體不友好,造成浪費

public

class

singleton

public

static singleton getinstance()

}

這種方式採用雙鎖機制,不但安全而且能在多執行緒情況下保持高效能。

public

class

singleton

public

static singleton getinstance()

}}return singleton;

}}

這種方式能達到雙檢鎖方式一樣的功效,實現較簡單,對靜態域使用延遲初始化,應使用這種方式而不是雙檢鎖方式。這種方式只適用於靜態域的情況,雙檢鎖方式可在例項域需要延遲初始化時使用。

public

class

singleton

private

singleton()

public

static

final singleton getinstance()

}

這種方式時實現單例模式的最佳方法,簡介,自動支援序列化機制,防止多次例項化。

public

enum singleton

}

一般情況下使用餓漢式就行,如果需要懶載入就使用靜態內部類,如果涉及到反序列化則可以用列舉的方式實現單例模式,如果有特殊需求則可以由dcl方式實現。

單例模式實現的幾種方式

單例模式三個主要特點 1 構造方法私有化 2 例項化的變數引用私有化 3 獲取例項的方法共有。package com.ctl.singleton 懶漢式單例 該模式的特點是類載入時沒有生成單例,只有當第一次呼叫 getlnstance 方法時才去建立這個單例 注意 如果編寫的是多執行緒程式,則不要刪...

單例模式的幾種實現方式

public class person private person person new person 出現stackoverflowerror錯誤 因為建立物件需要呼叫構造方法執行 構造方法執行在棧記憶體中 每次建立物件需要載入屬性 該屬性又是當前類物件 造成無限迴圈建立物件 最終棧記憶體壓滿 ...

單例模式的幾種實現方式

實現方式大致分為兩種 懶漢模式 在第一次使用該物件時,才會初始化例項,以免了資源的浪費,同時,需要考慮的是執行緒安全問題。餓漢模式 在類初始化時就需要建立乙個例項物件出來,當時並不一定會使用該物件,可能會造成資源的浪費,好處是不用考慮安全問題。下面看下幾種常見的實現方式 首先看懶漢模式 1 執行緒非...