首先來明白乙個問題,那就是在某些情況下,有些物件。我們僅僅須要乙個就能夠了,
比方,一台計算機上能夠連好幾個印表機,可是這個計算機上的列印程式僅僅能有乙個,
這裡就能夠通過單例模式來避免兩個列印作業同一時候輸出到印表機中,
即在整個的列印過程中我僅僅有乙個列印程式的例項。
簡單說來,單例模式(也叫單件模式)的作用就是保證在整個應用程式的生命週期中,
不論什麼乙個時刻。單例類的例項都僅僅存在乙個(當然也能夠不存在)。
從上面的類圖中能夠看出,在單例類中有乙個建構函式 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的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...