設計模式 單例模式

2021-08-13 08:45:47 字數 970 閱讀 6803

定義:作為物件的建立模式,單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。這個類稱為單例類。單例模式分成餓漢模式和懶漢模式。

餓漢模式**如下:

懶漢模式**如下:

餓漢模式與懶漢模式的區別:

餓漢式是典型的空間換時間,當類裝載的時候就會建立類的例項,不管你用不用,先建立出來,然後每次呼叫的時候,就不需要再判斷,節省了執行時間。執行緒安全

懶漢式是典型的時間換空間,就是每次獲取例項都會進行判斷,看是否需要建立例項,浪費判斷的時間。當然,如果一直沒有人使用的話,那就不會建立例項,則節約記憶體空間。執行緒不安全

怎麼實現執行緒安全的懶漢模式呢?

1.使用synchronized

2.雙重檢查加鎖

所謂「雙重檢查加鎖」機制,指的是:並不是每次進入getinstance方法都需要同步,而是先不同步,進入方法後,先檢查例項是否存在,如果不存在才進行下面的同步塊,這是第一重檢查,進入同步塊過後,再次檢查例項是否存在,如果不存在,就在同步的情況下建立乙個例項,這是第二重檢查。這樣一來,就只需要同步一次了,從而減少了多次在同步情況下進行判斷所浪費的時間。如下:

「雙重檢查加鎖」機制的實現會使用關鍵字volatile,它的意思是:被volatile修飾的變數的值,將不會被本地執行緒快取,所有對該變數的讀寫都是直接操作共享記憶體,從而確保多個執行緒能正確的處理該變數。

設計模式 單例模式

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