單例模式 餓漢模式和懶漢模式

2022-02-07 21:05:11 字數 2248 閱讀 3315

一、所謂類的單例設計模式,就是採取一定的方法保證在整個的軟體系統中,對某個類只能存在乙個物件例項

具體**的實現:

1、餓漢模式(提前建立物件)

//

餓漢模式

class

bank

//內部建立類的物件

//此物件也必須建立為靜態的

private

static bank instance = new

bank();

//提供公共的靜態方法,返回類的物件

public

static

bank getinstance()

}

2.懶漢模式(延遲建立物件)

//

懶漢模式

class

bank1

//宣告乙個沒有初始化的當前類物件

//此物件也必須建立為靜態的

private

static bank1 instance= null

;

//建立乙個返回當前類物件的公共靜態方法

public

static

bank1 getinstance()

return

instance;

}}

兩種方式的對比:

* 餓漢式:

* 壞處:物件載入時間過長。

* 好處:餓漢式是執行緒安全

*

* 懶漢式:好處:延遲物件的建立。

* 目前的寫法壞處:執行緒不安全。--->到多執行緒內容時,再修改

建立方式上的相同與不同:

相同點:兩者都需要建立私有的構造器,宣告私有靜態類的物件,建立返回當前類物件的公共靜態方法

不同點:1、餓漢模式在宣告私有靜態類的物件時對物件進行例項化

//

內部建立類的物件

//此物件也必須建立為靜態的

private

static bank instance = new bank();

懶漢模式在宣告私有靜態類的物件時不進行例項化

//

宣告乙個沒有初始化的當前類物件

//此物件也必須建立為靜態的

private

static bank1 instance= null;

2、餓漢模式:呼叫公共的靜態方法,返回類的物件

//

提供公共的靜態方法,返回類的物件

public

static

bank getinstance()

懶漢模式:呼叫公共的靜態方法時需要判斷物件名是否為空,若『真』則對物件進行例項化,『否』則返回已經建立過的物件。

//

建立乙個返回當前類物件的公共靜態方法

public

static

bank1 getinstance()

return

instance;

}

使用同步機制將單例模式中的懶漢式改寫為執行緒安全的。

方式一:每個執行緒進來時都需要等待前乙個執行緒執行完畢才能進入判斷,若已被例項化則之後的執行緒等待的時間是無意義的,增加了消耗時間。

方式二:在加入synchronized同步**塊之前先判斷一遍物件是否例項化,若已被例項化則不需要等待獲取鎖,直接獲取物件。減少消耗時間提高效率。

class

bank

private

static bank instance = null

;

public

static

bank getinstance()

//return instance;//}

//方式二:效率更高

if(instance == null

) }

}return

instance;

}}

單例模式 懶漢模式和餓漢模式

單例模式就是在整個程式中只能有乙個類的例項存在,並提供乙個訪問該例項的全域性訪問點。單例模式的優點 1 由於單例模式只生成乙個例項,較少了系統開銷,當乙個物件的產生的產生需要比較多的資源時,如讀取配置 產生其他依賴物件是,則可以通過在應用啟動時直接產生乙個單例物件,然後永久駐留內容的方式來解決。2 ...

單例模式 餓漢和懶漢模式

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

單例模式(餓漢模式 懶漢模式)

餓漢單例模式 通過單例模式可以保證系統中,應用該模式的類乙個類只有乙個例項 即乙個類只有乙個物件例項 並提供乙個訪問它的全域性訪問點,該例項被所有程式模組共享。設計模式 一書中給出了一種很不錯的實現,定義乙個單例類,使用類的私有靜態指標變數指向類的唯一例項,並用乙個公有的靜態方法獲取該例項。分點表述...