保證乙個類只有乙個例項,並且提供乙個訪問該例項的全域性訪問點。
由於單例模式只生成乙個例項,減少了系統效能開銷,當乙個物件的產生需要比較多的資源時,如讀取配置、產生其他依賴物件時,則可以通過在應用啟動時直接產生乙個單例物件,然後永久駐留記憶體的方式來解決
單例模式可以在系統設定全域性的訪問點,優化環共享資源訪問,例如可以設計乙個單例類,負責所有資料表的對映處理
主要:
餓漢式(執行緒安全,呼叫效率高。 但是,不能延時載入。)
懶漢式(執行緒安全,呼叫效率不高。 但是,可以延時載入。)
其他:
雙重檢測鎖式(由於jvm底層內部模型原因,偶爾會出問題。不建議使用)
靜態內部類式(執行緒安全,呼叫效率高。 但是,可以延時載入)
列舉單例(執行緒安全,呼叫效率高,不能延時載入)
package singleton;
/***@author danbro
*@funcition 餓漢式單例模式
**/public class singtondemo01
//提供乙個靜態屬性
//為什麼叫餓漢式 因為當這個類初始化時立即載入這個物件,不管後面有沒有使用這個物件
//缺點 如果這個載入物件比較耗時 則在後面用的時候發現還沒載入完成
private static singtondemo01 instance = new singtondemo01();
//提供乙個公共方法 返回物件
//執行緒安全 類載入過程是乙個天然的執行緒安全的模式
//方法沒有同步 呼叫效率高
public static singtondemo01 getinstance()
public static void main(string args)
}
package singleton;
/***@author danbro
*@funcition 懶漢式單例模式
**/public class singtondemo02
//方法要同步 呼叫效率低. 真正用的時候才載入物件
private static synchronized singtondemo02 getinstance()
return instance;
} public static void main(string args)
}
public class singletondemo03
} instance = sc;
} }
} return instance;
} private singletondemo03()
}
package singleton;
/***@author danbro
*@funcition 靜態內部類實現單例模式 呼叫效率高 並實現延時載入,執行緒安全
**/public class singtondemo04
private static class singletonclassinstance
public static singtondemo04 getinstance()
public static void main(string args)
}
外部類沒有static屬性,則不會像餓漢式那樣立即載入物件。 只有真正呼叫getinstance(),才會載入靜態內部類。載入類時是執行緒 安全的。 instance是static final型別,保證了記憶體中只有這樣乙個例項存在,而且只能被賦值一次,從而保證了執行緒安全性. 兼備了併發高效呼叫和延遲載入的優勢!
package singleton;
/***@author danbro
*@funcition 列舉式實現單例模式,沒有懶載入
**/public enum singtondemo05
public static void main(string args)
}
優點: 實現簡單 列舉本身就是單例模式。由jvm從根本上提供保障!避免通過反射和反序列化的漏洞!
缺點: 無延遲載入
列舉式 好於 餓漢式
靜態內部類式 好於 懶漢式
java設計模式之單例模式
單位面試題目中有一道關於單例模式的題目.大多數參加筆試的同事都會寫出getinstance這個函式,但是當我問起什麼情況下需要使用單例 單例具體有什麼好處的時候 static函式也可以構建唯一例項,為什麼還需要單例.從使用單例的經驗來看,如下場景下,個人感覺應該使用單例 1.如果需要構建乙個工具類,...
java設計模式 之 單例模式
單例模式 有些類在程式執行過程中只需要儲存乙個例項,比如檔案管理類,音訊管理類,那麼我們如何實現乙個單例類呢?有以下幾點 1 定義乙個靜態變數 2 建構函式私有化 3 提供乙個public 靜態方法,獲取這個例項 4 一定要做執行緒同步 public static class singleton p...
Java設計模式之單例模式
說到單例模式 大家一定非常熟悉 這是最常見也是設計模式中相對簡單 好理解的設計模式 今天就跟大家掰一掰單例模式 單例模式確保某個類只有乙個例項 應用場景 執行緒池 快取 等物件常常被設計成單例 然而單例分兩種 1 惡漢式 2 懶漢式 我們先來看下 惡漢式 public class singleton...