設計模式 單例模式

2021-10-08 17:48:47 字數 1797 閱讀 8839

定義:單例模式就是乙個類只能有乙個例項。

實現單例模式的必要條件:

1、類構造器必須是私有的

2、乙個靜態的該類物件

3、乙個獲取例項物件的靜態方法

單例模式的使用場景:在乙個系統中要求乙個類有且僅有乙個物件,如果出現多個物件就會出現「不良反應」,可以採用單例模式。

單例模式優缺點:

優點:記憶體開支少;減少了系統的效能開銷;避免對資源的多重占用;可以在系統設定全域性的訪問點,避免對同乙個資源檔案進行寫操作。

缺點:單例模式一般沒有介面,所以擴充套件困難。

這種方式是,不管你會不會用到該類的例項,系統都會幫你建立好。

優點:執行緒安全,不用加鎖,提高效率

缺點:類載入時就進行初始化,浪費記憶體

public

class

singleton

public

static singleton getsingleton()

}

這個方式會把例項物件的建立延遲到真正使用的時候。

public

class

singleton02

public

static singleton02 getsingleton()

catch

(interruptedexception e)

singleton=

newsingleton02()

;}return singleton;

}}

通過以下**可以驗證執行緒不安全 :

@test

public

void

dmeo1()

throws executionexception, interruptedexception };

future

s1 = executorservice.

submit

(callable)

; future

s2 = executorservice.

submit

(callable)

; system.out.

println

(s1.

get(

)==s2.

get())

;}

public

class

singleton03

public

static singleton03 getsingleton()

catch

(interruptedexception e)

singleton=

newsingleton03()

;}}}

return singleton;

}}

上面的**使用雙重檢查機制,可以優化執行效率。使得之後呼叫該方法時,不需要在singleton不為null時,還去獲取鎖,之後再去同步**塊中檢查,singleton是否為null。

public

class

singleton04

public

static singleton04 getsingleton()

private

static

class

innerclass

}

使用內部類實現單例模式就寫起來很簡單,效率也高。

內部類的載入時期是它第一次被使用的時候,而且類只能被載入一次。

設計模式 單例模式

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