設計模式 單例模式

2021-09-26 14:06:58 字數 845 閱讀 7254

單件模式用來建立獨一無二的,只能有乙個例項的物件的入場券

利用單件模式,我們可以在需要的時候才建立物件。如何實現呢?私有化該類的構造器,並在內部例項化。提供乙個靜態方法getinstance(),返回該類的例項。返回前,先檢查,為例項化,則先例項化。這樣,只有在第一次呼叫時,才需要例項化的物件,後面返回的都是同乙個。

但是這會存在乙個問題。多執行緒時,可能會出現多個例項 。有人提出將靜態方法加鎖。。

那麼,該如何改善多執行緒呢?

如果getinstance()的效能對應用程式不是很關鍵,就什麼都別做。同步乙個方法可能造成程式執行效率下降100倍。因此,如果將getinstance()的程式使用在頻繁執行的地方,你可能就得重新考慮了。

使用「急切」建立例項,而不用延遲例項化的做法。利用這個做法,我們依賴jvm在載入這個類時馬上建立唯一的單件例項。jvm保證在任何執行緒訪問uniqueinstance靜態變數之前,一定先建立此例項。

public class singleton 

public static singleton getinstance()

}

用「雙重檢查加鎖」,在getinstance()中減少使用同步。利用雙重檢查鎖(double-checked locking),首先檢查是否例項已經建立了,如果尚未建立,「才」進行同步。這樣一來,只有第一次會同步,這正是我們想要的。

public class singleton 

public static singleton getinstance() }}

return uniqueinstance;

}}

設計模式 單例模式

單例模式 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的序列生成等.但單例的使用需要謹慎,特別是在需要作負載均衡的地方,因為這種程式級的單例模式實際上只能保證在乙個應用中為單例.如果被多個應用載入,還是會...