java設計模式之單例模式解析
單例模式是最簡單但同時也是很重要的一種設計模式,優(yōu)點有以下幾個方面:
1.當內存占用特別大的類需要頻繁地創(chuàng)建銷毀時,單例模式可以節(jié)省內存和提高性能,例如myBatis里面的sessionFactory
2.當需要對文件做單一讀寫時,例如同一時間只能同時寫入一個windows文本文件,則需要用單例來避免多重讀寫
缺點是:
1.單例模式沒有接口,很難對其進行拓展。
2.不利于測試,沒辦法直接根據(jù)接口mock出一個對象出來測試
最后說下其實現(xiàn)方式主要有餓漢模式和懶漢模式。其中懶漢模式又可以細分為幾種,后面再說。
餓漢模式代碼:
public Class Singleton{
//在類加載時便實例化自身,餓漢模式
private static Class Singletom instance = new Singleton();
private Singleton(){};
public getInstance(){
return this.instance
}
}
懶漢模式且線程安全代碼1
public Class Singleton{
private static Class Singletom instance = null;
private Singleton(){};
public static Singleton getInstance(){
if(instance==null){
//雙重檢測鎖定懶漢模式,如果是直接在getInsance上加鎖,因為有99%的情況是線程安全的,會增加性能消耗,故才有雙重檢測鎖定,優(yōu)化鎖,讓鎖只在1%的情況才執(zhí)行
synchronized (Singleton.class) {
if (singleton == null)
{
singleton = new Singleton();
}
}
return this.instance
}
}
懶漢模式且線程安全代碼2
public Class Singleton{
//靜態(tài)內部類的方式,應該是因為classLoader的機制使得內部類不會在類
//裝載時便實例化,所以可行
private static Class SingletomLoader(){
private static Singleton instance = new Singleton();
}
private Singleton(){};
public static final Singleton getInstance(){
return SingletomLoader.instance
}
}
總結:spring容器中的bean便使用了單例模式,由spring容器控制其bean的生命周期,而如果設置成多例模式的話,則是交由J2EE容器負責其對象的生命周期。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
IDEA啟動Tomcat時控制臺出現(xiàn)亂碼問題及解決
這篇文章主要介紹了IDEA啟動Tomcat時控制臺出現(xiàn)亂碼問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02

