Java設計模式--單例模式

一、單例模式的介紹
Singleton 是一種創建型模式,指某個類採用 Singleton 模式,則在這個類被創
建後,只可能產生一個實例供外部訪問,並且提供一個全局的訪問點。
全局對象和 Singleton 模式有本質的區別,因爲大量使用全局對象會使得程
序質量降低,而且有些編程語言根本不支持全局變量。最重要的是傳統的全局對
象並不能阻止一個類被實例化多次。
二、單例模式 的 特點
 單例類只能有一個實例
 單例類必須自己創建自己的唯一實例。
 單例類必須給所有其他對象提供這一實例。
三、單例模式的應用
 每臺計算機可以由若干個打印機,但只能有一個 Printer Spooler,避免有兩個
作業同時輸出到打印機。
 一個具有自動編號主鍵的表可以有多個用戶同時使用,但數據庫中只能有一
個地方分配下一個主鍵。否則會出現主鍵重複。
四、單例 模式 使用的 注意
 不要使用單例模式存取全局變量。這違背了單列模式的用意,最好放到對應
類的靜態成員中。
 不要將數據庫連接做成單例,因爲一個系統可能與數據庫有多個連接,並且
在有連接池的情況下,應當儘可能及時釋放連接。Singleton 模式由於使用靜
態成員存儲類實例,所以可能會造成資源無法及時釋放。
五、單例模式的舉例
(1)
/* 線程安全 但效率比較低 一開始就要加載類new一個 對象
這是餓漢方式的單例模式*/
public class Singleton1 {
private Singleton1(){
}
private static final Singleton1  instance =new Singleton1();
public static Singleton1 getInstancei(){
return  instance ;
}
}
(2)
// 飽漢方式的單例模式 但是有多個線程訪問時就不是安全的 返回的不是同一
個對象
public class Singleton {
private Singleton(){
}
private static Singleton  instance ;
public static Singleton getInstance() {
if ( instance == null)
instance = new Singleton();
return  instance ;
}
}
(3)
//雖然是安全的 但是效率非常低在一個時候只有一個線程能訪問 同時返回一
個對象
public class Singleton2 {
private Singleton2(){
}
private static Singleton2  instance ;
public static synchronized Singleton2 getInstance() {
if ( instance == null)
instance = new Singleton2();
return  instance ;

}
(4)
/* 線程安全 並且效率高 能有多個線程訪問*/
public class Singleton3 {
private static Singleton3  instance ;
private Singleton3() {
}
public static Singleton3 getIstance() {
if ( instance == null) {
synchronized (Singleton3.class) {
if ( instance == null) {
instance = new Singleton3();
}
}
}
return  instance ;
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章