首先來明確乙個問題,那就是在某些情況下,有些物件,我們只需要乙個就可以了,
比如,一台計算機上可以連好幾個印表機,但是這個計算機上的列印程式只能有乙個,
這裡就可以通過單例模式來避免兩個列印作業同時輸出到印表機中,
即在整個的列印過程中我只有乙個列印程式的例項。
簡單說來,單例模式(也叫單件模式)的作用就是保證在整個應用程式的生命週期中,
任何乙個時刻,單例類的例項都只存在乙個(當然也可以不存在)。
從上面的類圖中可以看出,在單例類中有乙個建構函式 singleton ,
但是這個建構函式卻是私有的(前面是「 - 」符號),
然後在裡面還公開了乙個 getinstance()方法,
通過上面的類圖不難看出單例模式的特點,從而也可以給出單例模式的定義
單例模式保證乙個類僅有乙個例項,同時這個類還必須提供乙個訪問該類的全域性訪問點。
下面來看**:
這裡new了三個singleton,在多執行緒環境下可能存在多個執行緒判斷instance==null,所以會分別new出自己的instance,這顯然違背了單例模式的初衷。
接下來我們換種寫法:
public
class singleton2
public
static singleton2 getsingleton1()
}
為什麼說是餓漢的singleton,因為如上面**所示,在用到示例instance之前就已經把它初始化好了,雖然這裡是執行緒安全的,但是也會影響效能,所以我們來看第三種singleton。
public
class singleton
private
static
class singletonholder
public
static singleton getsingleton()
}
如上述**所示,這裡用到了singletonholder這個內部類,這個內部類只會在singletonholder.instance中用到,也就是用的時候才會初始化,故稱為懶漢singleton,這樣既解決了多執行緒下不安全的問題,同時也解決了提前初始化影響的效能問題,所以是最推薦的一種寫法。 設計模式 單例模式
單例模式 singleton pattern 是乙個比較簡單的模式,其定義如下 ensure a class has only one instance,and provide a golbal point of acess to it.確保某乙個類只有乙個例項,而且自行例項化並且向整個系統提供這個...
設計模式 單例模式
class testsingleton static public function instance return self testsingleton private function clone public function setsinvar sinvar public function ...
設計模式 單例模式
單例模式的目的是保證類在系統中只被例項化一次,由該唯一的例項來為系統提供服務.單例模式主要用於保證服務的統一,比如獲取統一的編號服務,模仿oracle的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...