單例模式。建構函式是私有的,通過乙個共有的成員函式還呼叫這個建構函式,在多執行緒環境下,還需要對這個成員函式進行加鎖。
下面是4種單例的建立方式,最安全也最好的是第4種,使用內部類的方式。
1、懶漢式單例,執行緒不安全的
//1、懶漢式單例,執行緒不安全的
public
class
singleton
public
static
singleton getinstance()
return
instance;
}}
2、懶漢式單例,執行緒安全的
這種寫法能夠在多執行緒中很好的工作,而且看起來它也具備很好的lazy loading,但是,遺憾的是,效率很低,99%情況下不需要同步。
publicclass
singleton
public
static
synchronized
singleton getinstance()
return
instance;
}}
3、餓漢式,執行緒安全,但不能保證是懶載入的模式
這種方式基於classloder機制避免了多執行緒的同步問題。不過,instance在類裝載時就例項化,雖然導致類裝載的原因有很多種,在單例模式中大多數都是呼叫getinstance方法會導致類載入,此時就是lazy loading。
但是也不能確定有其他的方式(或者其他的靜態方法)導致類裝載,這時候初始化instance顯然沒有達到lazy loading的效果。
publicclass
singleton
public
static
singleton getinstance()
}
4、靜態內部類方式
這種方式同樣利用了classloder的機制來保證初始化instance時只有乙個執行緒,它跟第三種方式不同的是(很細微的差別):第三種方式是只要singleton類被裝載了,那麼instance就會被例項化(沒有達到lazy loading效果)。而這種方式是singleton類被裝載了,instance不一定被初始化。因為singletonholder類沒有被主動使用,只有顯示通過呼叫getinstance方法時,才會顯式裝載singletonholder類,從而例項化instance。想象一下,如果例項化instance很消耗資源,我想讓他延遲載入,另外一方面,我不希望在singleton類載入時就例項化,因為我不能確保singleton類還可能在其他的地方被主動使用從而被載入,那麼這個時候例項化instance顯然是不合適的,這個時候,這種方式相比第三種方式就顯得很合理。
publicclass
singleton
private
singleton()
public
static
final
singleton getinstance()
}
python單列模式 Python單列模式
實現單例模式的幾種方式 1.使用模組 2.使用裝飾器 3.使用類 4.基於 new 方法實現 推薦使用,方便 5.基於metaclass方式實現 單例模式 singleton pattern 是一種常用的軟體設計模式,該模式的主要目的是確保某乙個類只有乙個例項存在。當你希望在整個系統中,某個類只能出...
設計模式 單列模式
何為設計模式呢?簡單的說就是能重複利用的解決方案,當碰到a專案也出現這種情況,b專案也出現這種情況 那麼是否能把這懂實現功能抽象出來,形成一種解決方案.單列模式 顧名思義就是乙個例項 即乙個物件只能初始化一次 作用 減少開闢記憶體空間,節約記憶體開銷 class program 因為a物件在記憶體堆...
設計模式 單列模式
原文 單例模式是最常用到的設計模式之一,熟悉設計模式的朋友對單例模式都不會陌生。一般介紹單例模式的書籍都會提到餓漢式和懶漢式這兩種實現方式。但是除了這兩種方式,本文還會介紹其他幾種實現單例的方式,讓我們來一起看看吧。單例模式是一種常用的軟體設計模式,其定義是單例物件的類只能允許乙個例項存在。許多時候...