Java編程23種設計模式之單例模式

單例模式是一種常用的軟件設計模式。通過單例模式可以保證系統中一個類只有一個實例而且該實例易於外界訪問,從而方便對實例個數的控制並節約系統資源。如果希望在系統中某個類的對象只能存在一個,單例模式是最好的解決方案。
這個模式有幾個好處:
1、某些類創建比較頻繁,對於一些大型的對象,這是一筆很大的系統開銷。
2、省去了new操作符,降低了系統內存的使用頻率,減輕GC壓力。
3、有些類如交易所的核心交易引擎,控制着交易流程,如果該類可以創建多個的話,系統完全亂了。(比如公司的多領導,有時多個領導給你安排工作,那麼你一天的工作就會亂成一團),所以只有使用單例模式,才能保證核心交易服務器獨立控制整個流程。
舉例一個項目中的操作用戶的單例模式
public class SystemOperationUser {
//私有靜態實力對象
private static SystemOperationUser sou = null;
//私有構造,防止被實例化
private SystemOperationUser() {
}
//靜態創建方法實例
public static SystemOperationUser getInstance() {
if (sou == null) {
sou = new SystemOperationUser();
}
return sou;
}

}
補充:我也在網絡上看到單例模式放在多線程中不安全,需要sysnchronized關鍵字
public static sysnchronized SystemOperationUser getInstance() {
if (sou == null) {
sou = new SystemOperationUser();
}
return sou;
}
這個方法每一次別調用的的時候,都需要上鎖,而實際第一次調用上鎖就OK了,所以上面的方法還需要修改一下
public static SystemOperationUser getInstance() {
if (sou == null) {
sysnchronized(sou ){
if (sou == null) {
sou = new SystemOperationUser();
}
}

}
return sou;
}
根據網絡上的知識,寫了一個完美的單例模式
public class SystemOperationUser {
// 私有靜態實力對象
private static SystemOperationUser sou = null;

// 私有構造,防止被實例化
private SystemOperationUser() {
}

// 靜態創建實例
public static SystemOperationUser getInstance() {
if (sou == null) {
sync();
}
return sou;
}

// 同步
public static synchronized void sync() {
if (sou == null) {
sou = new SystemOperationUser();
}
}

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章