餓漢式(1)(–普通情況建議使用–)
package singleton;
/** * 餓漢式
* 類載入到記憶體後,就例項化乙個單例,jvm保證執行緒安全
* 簡單使用,推薦使用
* 唯一缺點:不管用到與否,類裝載時就完成例項化
* */
public
class
mgr01
public
static mgr01 getinstance()
public
voidm(
)public
static
void
main
(string[
] args)
}
餓漢式(2)(–跟01一樣–)package singleton;
/** * 餓漢式
* 跟01是乙個意思
* */
public
class
mgr02
private
mgr02()
public
static mgr02 getinstance()
public
voidm(
)public
static
void
main
(string[
] args)
}
懶漢式(1)(–執行緒不安全–)package singleton;
/** * lazy loading
* 也稱懶漢式
* 雖然達到了按需初始化的目的,但卻帶來執行緒不安全的問題
* */
public
class
mgr03
public
static mgr03 getinstance()
catch
(interruptedexception e)
instance =
newmgr03()
;}return instance;
}public
voidm(
)public
static
void
main
(string[
] args)).
start()
;}}}
懶漢式(2) (–可以通過synchronized解決,但也帶來效率下降–)
package singleton;
/** * lazy loading
* 也稱懶漢式
* 雖然達到了按需初始化的目的,但卻帶來執行緒不安全的問題
* 可以通過synchronized解決,但也帶來效率下降
* */
public
class
mgr04
public
static
synchronized mgr04 getinstance()
catch
(interruptedexception e)
instance =
newmgr04()
;}return instance;
}public
voidm(
)public
static
void
main
(string[
] args)).
start()
;}}}
懶漢式(3)(–試圖通過減小同步**塊的方式提高效率,然後不可行 --)
package singleton;
/** * lazy loading
* 也稱懶漢式
* 雖然達到了按需初始化的目的,但卻帶來執行緒不安全的問題
* 可以通過synchronized解決,但也帶來效率下降
* */
public
class
mgr05
public
static mgr05 getinstance()
catch
(interruptedexception e)
instance =
newmgr05()
;}}return instance;
}public
voidm(
)public
static
void
main
(string[
] args)).
start()
;}}}
懶漢式(4)(–雙重檢查 --)
package singleton;
/** * lazy loading
* 也稱懶漢式
* 雖然達到了按需初始化的目的,但卻帶來執行緒不安全的問題
* 可以通過synchronized解決,但也帶來效率下降
* */
public
class
mgr06
public
static mgr06 getinstance()
catch
(interruptedexception e)
instance =
newmgr06()
;}}}
return instance;
}public
voidm(
)public
static
void
main
(string[
] args)).
start()
;}}}
靜態內部類方式 (–推薦載入外部類時不會載入內部類,這樣可以實現懶載入–)
package singleton;
/** * 靜態內部類方式
* jvm保證單例
* 載入外部類時不會載入內部類,這樣可以實現懶載入
* */
public
class
mgr07
private
static
class
mgr07holder
public
static mgr07 getinstance()
public
voidm(
)public
static
void
main
(string[
] args)).
start()
;}}}
列舉類方式 (–最佳方案)
package singleton;
/** *不僅可以解決執行緒同步,還可以防止反序列化
*(a列舉內部每個例項都會被jvm加上static final,在jvm層保證只初始化一次)
*/public
enum mgr08
public
static
void
main
(string[
] args)).
start()
;}}}
jit 23種設計模式 之單例設計模式
一 定義 確保某乙個類只有乙個例項,而且自行例項化,並且向整個系統提供這個例項。二 優點 減少了記憶體的開支,減少系統的效能開銷,避免了對於資源的多重占用,優化其資源訪問。三 缺點 擴充套件困難,對於測試不利。四 注意 單例設計模式模式對於使用於系統資源小號過多的操作中,例如io或者連線資料庫。五 ...
23種設計模式之單例模式
我們也經常遇到類似的情況,為了節約系統資源,有時需要確保系統中某個類只有唯一乙個例項,當這個唯一例項建立成功之後,我們無法再建立乙個同型別的其他物件,所有的操作都只能基於這個唯一例項。為了確保物件的唯一性,我們可以通過單例模式來實現,這就是單例模式的動機所在。定義 單例模式 singleton pa...
23種設計模式之 單例模式
保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。讓類自身負責儲存它的唯一例項,這個類可以保證沒有其他例項可以被建立,並且它可以提供乙個訪問 獲取 該例項的方法。單例類應滿足以下特點 單例類 singleton 自己例項化自己的唯一例項,並提供訪問該唯一例項的方法。public class s...