單例模式的三種實現 以及各自的優缺點

2021-09-07 12:48:46 字數 1045 閱讀 7476

單例模式:單例模式的意思就是只有乙個例項。單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。這個類稱為單例類。

單例模式有三種:懶漢式單例,餓漢式單例,登記式單例。

1.懶漢式單例

public

class

singleton //

此類不能被例項化

public

static

synchronized

singleton getinstance()

return

singleton;

}}優點:第一次呼叫才初始化,避免記憶體浪費。

缺點:必須加鎖synchronized 才能保證單例,(如果兩個執行緒同時呼叫getinstance方法,會chuxia)但加鎖會影響效率。

2.餓漢式單例

public

class

singleton //

此類不能被例項化

public

static

singleton getinstance()

}優點:沒有加鎖,執行效率會提高。

缺點:類載入時就初始化,浪費記憶體。

3.登記式模式(holder)

public

class

singleton //

構造方法是私有的,從而避免外界利用構造方法直接建立任意多例項。

public

static

singleton getinstance()

private

static

class

holder

}內部類只有在外部類被呼叫才載入,產生singleton例項;又不用加鎖。此模式有上述兩個模式的優點,遮蔽了它們的缺點,是最好的單例模式。

-----說明:之前一直不太清楚幾個模式之間的區別;也不曉得單例模式的注意點,就知道個概念吧。這次在同事的督促下寫完乙個單例,然後聽他講了三個單例以及之間的區別,有種豁然開朗的感覺。貌似最後乙個模式是我之前一直沒理解的。分享之,希望大家都能弄懂單例~

單例模式的三種實現 以及各自的優缺點

單例模式 單例模式的意思就是只有乙個例項。單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。這個類稱為單例類。單例模式有三種 懶漢式單例,餓漢式單例,登記式單例。1.懶漢式單例 public class singleton 此類不能被例項化 public static syn...

單例模式的三種實現

class singleton public static singleton getinstance 缺點 類每次使用時都會初始化靜態成員變數 呼叫該類的其它方法時也會初始化 浪費記憶體。class singleton public static singleton getinstance ret...

單例模式的三種實現方法

在實際開發中,我們往往需要乙個類只能被例項化一次,如果有多個物件的話,就會導致混亂情況發生。優點 一 例項控制 單例模式會阻止其他物件例項化其自己的單例物件的副本,從而確保所有物件都訪問唯一例項。二 靈活性 因為類控制了例項化過程,所以類可以靈活更改例項化過程。一 開銷 雖然數量很少,但如果每次物件...