一、所謂類的單例設計模式,就是採取一定的方法保證在整個的軟體系統中,對某個類只能存在乙個物件例項。
具體**的實現:
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同步**塊之前先判斷一遍物件是否例項化,若已被例項化則不需要等待獲取鎖,直接獲取物件。減少消耗時間提高效率。
classbank
private
static bank instance = null
;
public
static
bank getinstance()
//return instance;//}
//方式二:效率更高
if(instance == null
) }
}return
instance;
}}
單例模式 懶漢模式和餓漢模式
單例模式就是在整個程式中只能有乙個類的例項存在,並提供乙個訪問該例項的全域性訪問點。單例模式的優點 1 由於單例模式只生成乙個例項,較少了系統開銷,當乙個物件的產生的產生需要比較多的資源時,如讀取配置 產生其他依賴物件是,則可以通過在應用啟動時直接產生乙個單例物件,然後永久駐留內容的方式來解決。2 ...
單例模式 餓漢和懶漢模式
一 單例模式定義 單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。在計算機系統中,執行緒池 快取 日誌物件 對話方塊 印表機 顯示卡的驅動程式物件常被設計成單例。這些應用都或多或少具有資源管理器的功能。每台計算機可以有若干個印表機,但只能有乙個printer spooler,...
單例模式(餓漢模式 懶漢模式)
餓漢單例模式 通過單例模式可以保證系統中,應用該模式的類乙個類只有乙個例項 即乙個類只有乙個物件例項 並提供乙個訪問它的全域性訪問點,該例項被所有程式模組共享。設計模式 一書中給出了一種很不錯的實現,定義乙個單例類,使用類的私有靜態指標變數指向類的唯一例項,並用乙個公有的靜態方法獲取該例項。分點表述...