單例模式莫過於是我們最常用的設計模式之一了,它的優缺點就是「優也單例,缺也單例」,當然應用它方面優點還是較多些的,所以下面我們看看,常用的幾種實現方式有哪些吧。
這種是最基本的實現方式,最大的問題就是不支援多執行緒,由於沒有加鎖,嚴格上並不算單例模式。
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 執行緒非...