單列模式對比

2022-09-11 08:30:13 字數 1538 閱讀 4957

單例模式。建構函式是私有的,通過乙個共有的成員函式還呼叫這個建構函式,在多執行緒環境下,還需要對這個成員函式進行加鎖。

下面是4種單例的建立方式,最安全也最好的是第4種,使用內部類的方式。

1、懶漢式單例,執行緒不安全的

//

1、懶漢式單例,執行緒不安全的

public

class

singleton

public

static

singleton getinstance()

return

instance;

}}

2、懶漢式單例,執行緒安全的

這種寫法能夠在多執行緒中很好的工作,而且看起來它也具備很好的lazy loading,但是,遺憾的是,效率很低,99%情況下不需要同步。

public

class

singleton

public

static

synchronized

singleton getinstance()

return

instance;

}}

3、餓漢式,執行緒安全,但不能保證是懶載入的模式

這種方式基於classloder機制避免了多執行緒的同步問題。不過,instance在類裝載時就例項化,雖然導致類裝載的原因有很多種,在單例模式中大多數都是呼叫getinstance方法會導致類載入,此時就是lazy loading。

但是也不能確定有其他的方式(或者其他的靜態方法)導致類裝載,這時候初始化instance顯然沒有達到lazy loading的效果。

public

class

singleton

public

static

singleton getinstance()

}

4、靜態內部類方式

這種方式同樣利用了classloder的機制來保證初始化instance時只有乙個執行緒,它跟第三種方式不同的是(很細微的差別):第三種方式是只要singleton類被裝載了,那麼instance就會被例項化(沒有達到lazy loading效果)。而這種方式是singleton類被裝載了,instance不一定被初始化。因為singletonholder類沒有被主動使用,只有顯示通過呼叫getinstance方法時,才會顯式裝載singletonholder類,從而例項化instance。想象一下,如果例項化instance很消耗資源,我想讓他延遲載入,另外一方面,我不希望在singleton類載入時就例項化,因為我不能確保singleton類還可能在其他的地方被主動使用從而被載入,那麼這個時候例項化instance顯然是不合適的,這個時候,這種方式相比第三種方式就顯得很合理。

public

class

singleton

private

singleton()

public

static

final

singleton getinstance()

}

python單列模式 Python單列模式

實現單例模式的幾種方式 1.使用模組 2.使用裝飾器 3.使用類 4.基於 new 方法實現 推薦使用,方便 5.基於metaclass方式實現 單例模式 singleton pattern 是一種常用的軟體設計模式,該模式的主要目的是確保某乙個類只有乙個例項存在。當你希望在整個系統中,某個類只能出...

設計模式 單列模式

何為設計模式呢?簡單的說就是能重複利用的解決方案,當碰到a專案也出現這種情況,b專案也出現這種情況 那麼是否能把這懂實現功能抽象出來,形成一種解決方案.單列模式 顧名思義就是乙個例項 即乙個物件只能初始化一次 作用 減少開闢記憶體空間,節約記憶體開銷 class program 因為a物件在記憶體堆...

設計模式 單列模式

原文 單例模式是最常用到的設計模式之一,熟悉設計模式的朋友對單例模式都不會陌生。一般介紹單例模式的書籍都會提到餓漢式和懶漢式這兩種實現方式。但是除了這兩種方式,本文還會介紹其他幾種實現單例的方式,讓我們來一起看看吧。單例模式是一種常用的軟體設計模式,其定義是單例物件的類只能允許乙個例項存在。許多時候...