單例的條件是:
1.私有化建構函式
2.私有化靜態物件例項
3.對外提供乙個方法可以獲取靜態私有化例項物件
最常用的二種:餓漢式和懶漢式
一、餓漢式顧名思義就是上來不管三七二十一就建立乙個例項物件。所以即使在多執行緒併發的情況下也是執行緒安全的。但是浪費儲存空間。
public class singleton
public static singleton getinstance()
}
二、懶漢式就是剛上來不建立例項物件,當需要時才建立(延時載入),在多執行緒併發的時候就會出現執行緒安全問題。因此我們改造成雙層if判斷並加鎖(synchronized)
public class singleton
public static singleton getsingleton()
} }
return singleton;
} }
但問題出現了,這樣執行效率低,
我們最終的解決方案是:
靜態內部類來完全解決以上二種模式的缺點,(即不浪費空間(餓漢式),又實現了延時載入和執行緒安全(懶漢式))而且書寫簡單。
**如下:
/**
* 使用靜態內部類來實現單例模式(延遲載入和執行緒安全)
* @author administrator
* 這種靜態內部類的實現方法,即解決了使用雙重if影響效能和餓漢式占用空間多問題
* 因為當虛擬機器載入外部類的時候,不載入內部類,當需要使用物件的時候,才載入內部類,這樣可以起到延遲載入,節約了空間
* 執行緒安全借助於jvm的執行緒安全來實現。
* *
* 使用場景:spring中建立bean例項時就是使用單例
*/public class singleton
//私有化建構函式
private singleton(){};
//對外提供乙個方法可以獲取靜態私有化物件
public singleton getintance()
}
java設計模式 單例設計模式
public class main 餓漢式 空間換時間 多執行緒訪問不會建立多個物件 author admin class singleton 2建立本類物件 private static singleton s new singleton 3對外提供公共的訪問方法 public static si...
Java單例設計模式
單例設計模式也有人叫單態,基本上有兩種寫法一種是餓漢式,另外一種是懶漢式。餓漢式就是一開始就建立了例項物件 public class singleton public static singleton getintance 懶漢式是需要的時候才建立 它比較懶 而且會涉及執行緒同步問題,需要增加同步 ...
java 單例設計模式
單例設計模式 保證乙個類在記憶體中只有乙個物件。模式 模式就是解決 一類 問題的固定步驟 模式的概念最早起源於建築行業 建房子的步驟都是一樣子 打地基 澆柱子 蓋樓面 砌牆 封頂 裝修 入住軟體行業中23種設計模式 單例設計模式 模板設計模式 裝飾者設計模式 觀察者設計模式 工廠設計模式單例設計模式...