建立型 單例模式

2021-08-03 08:11:06 字數 1990 閱讀 5619

定義

作為物件的建立模式,單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。這個類稱之為單例類。

特點

單例類只能有乙個例項;

單例類必須自己建立自己的唯一例項;

單例類必須給所有的其他物件提供這一例項。

餓漢模式:

/*

* 單例模式singleton

* 應用場合:有些物件只需要乙個就足夠了,如古代皇帝、老婆

* 作用:保證整個應用程式中某個例項有且只有乙個

* 型別:餓漢模式、懶漢模式

*/public

class singleton

//2.建立類的唯一例項,使用private static修飾

private

static singleton instance=new singleton();

//3.提供乙個用於獲取例項的方法,使用public static修飾

public

static singleton getinstance()

}

在這個類被載入時,靜態變數instance會被初始化,此時類的私有建構函式被呼叫,這時,單例類的唯一例項被建立。

餓漢式其實是一種比較形象的稱謂。既然餓,那麼在建立物件例項的時候就比較著急,餓了嘛,於是在裝載類的時候就建立物件例項

private

static singleton instance=new singleton();

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

優點:不管你用不用,先建立出來,然後每次呼叫的時候,就不需要再判斷,節省了執行時間

懶漢模式:

/*

* 懶漢模式

* 區別:餓漢模式的特點是載入類時比較慢,但執行時獲取物件的速度比較快,執行緒安全

* 懶漢模式的特點是載入類時比較快,但執行時獲取物件的速度比較慢,執行緒不安全

*/public

class singleton2

//2.宣告類的唯一例項,使用private static修飾

private

static singleton2 instance;

//3.提供乙個用於獲取例項的方法,使用public static修飾

public

static singleton2 getinstance()

return instance;

}}

懶漢式單例類實現裡對靜態工廠方法使用了同步化,以處理多執行緒環境。

懶漢式其實是一種比較形象的稱謂。既然懶,那麼在建立物件例項的時候就不著急。會一直等到馬上要使用物件例項的時候才會建立,因此在裝載物件的時候不建立物件例項。

private

static singleton2 instance;

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

由於懶漢式的實現是執行緒安全的,這樣會降低整個訪問的速度,而且每次都要判斷。

缺點:浪費時間,懶漢式的實現是執行緒安全的,就是每次獲取例項都會進行判斷,看是否需要建立例項,浪費判斷的時間。

優點:如果一直沒有人使用的話,那就不會建立例項,則節約記憶體空間。

public

class test else

//懶漢模式

singleton2 s3=singleton2.getinstance();

singleton2 s4=singleton2.getinstance();

if(s3==s4)else

}}

建立型 單例模式

單例模式是所有模式中我們平常用的最多而且比較好理解的乙個模式。保證乙個類緊乙個例項,並提供乙個訪問它的全域性訪問點。在一些情況下,我們可能需要某個類只能建立出乙個物件,既不讓使用者用該類例項化出多餘兩個的例項。單例類 singleton 單例類只可以建立出乙個例項。只有乙個參與者,可以看出它是乙個很...

Singleton 單例模式(建立型)

單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。在計算機系統中,執行緒池 快取 日誌物件 對話方塊 印表機 顯示卡的驅動程式物件常被設計成單例。這些應用都或多或少具有資源管理器的功能。每台計算機可以有若干通訊埠,系統應當集中管理這些通訊埠,以避免乙個通訊埠同時被兩個請求同時呼...

關於單例模式 建立型

單例模式用來確保每乙個類都有乙個例項,並且自行實體化並且向整個系統提供這個例項,單例模式常常用於避免產生多個物件消耗過多的資源,或者某種型別的資源應該有並且只有乙個,例如訪問資料庫和訪問io的時候就要考慮單例模式。比較經典的單例模式有懶漢式和惡漢式兩種,下面給出這兩種不同方式的uml圖 1.惡漢式 ...