設計模式 單例模式

2022-08-29 06:51:11 字數 1737 閱讀 5477

定義:

保證乙個類只有乙個例項,並提供乙個訪問它的全域性訪問點。

實現:1. 將構造方法私有化。外部不能通過構造方法來例項化乙個物件,只能通過靜態方法來獲得該類的唯一例項。

2. 定義乙個私有類的靜態變數。(靜態方法不能訪問非靜態成員變數,所以定義乙個靜態變數)

3. 提供乙個共有的獲取例項的靜態方法。

好處:單例模式的特點是單例類在應用程式中只被例項化一次,以保證外界訪問的都是同乙個物件。避免了多次建立的問題,節省系統資源,加快物件的訪問速度。

缺點:不適於變化的物件,沒有抽象層不利於擴充套件。

五種書寫單例模式方式:

懶漢式    

在第一次使用時候才進行初始化,有執行緒安全問題,達到懶載入效果。 新增關鍵字 synchronized 保證執行緒安全。防止多執行緒中a和b同時進入instance沒有初始化 建立兩個例項。每次獲取例項都要進行同步,因此效率低。

public classsingleton01 

// 提供乙個共有的獲取例項的靜態方法

public static synchronizedsingleton01 getinstance()

returninstance;

}}

總結:執行緒安全(新增了synchronized 關鍵字) 、 懶載入 (執行時才初始化)、效率低(每次都要進行同步)    

餓漢式載入時候就初始化,沒有執行緒安全問題,效率高、沒有懶載入,如果該例項沒有被使用過,會造成記憶體浪費。

public classsingleton02 

// 提供乙個共有的獲取例項的靜態方法

public staticsingleton02 getinstance()

}

雙重監測機制(dcl)

只有使用時,才進行初始化,達到懶載入效果、只有在初始化時候才會進行加鎖、沒有執行緒問題、也不會影響效率。

public classsingleton03 ;

// 提供乙個共有的獲取例項的靜態方法

public staticsingleton03 getinstance() }}

returninstance;

}}

總結:執行緒安全(初始化時加鎖)、懶載入、效率高

靜態內部類(延遲初始化佔位類)

只有使用時候,呼叫靜態內部類進行初始化、達到懶載入效果。沒有執行緒問題(類變數的賦值語句,在編譯生成位元組碼的時候寫在()中,初始化單執行緒呼叫()完成變數的賦值)、效率高。

public classsingleton04 

// 私有化建構函式

privatesingleton04() {}

// 提供乙個共有的獲取例項的靜態方法

public staticsingleton04 getinstance()

}

總結:執行緒安全、懶載入、效率高

列舉列舉執行緒安全只會裝載一次,執行緒安全。不會被反射破壞單利。

public classsingleton05 ;

// 列舉型別

private enumsingletonenum

// 私有化方法

privatesingleton05 getinstance()

}// 提供乙個共有的獲取例項的靜態方法

public staticsingleton05 getinstance()

}

總結:執行緒安全、懶載入、效率高

設計模式 單例模式

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