使用場景:
當使用乙個類會消耗很大的系統資源時,沒有必要去建立多個物件,這時候我們就應該使用單例模式。而為了使建立的物件有且只有乙個,類的構造方法應該是私有的,且獲取例項的方法應該是執行緒安全的。
單例的幾種實現方式:
1.餓漢模式
public class test
public static test getins()
}
餓漢模式是在宣告的時候就已經初始化了乙個物件,假如沒有使用的話這個物件也一直存在。
2.懶漢模式
public class test
public synchronized static test getins()
return signalins;
}}
懶漢模式相對於餓漢模式來說是在呼叫getins的時候才會去初始化物件,但是由於synchronized導致每次呼叫getins時都進行了同步,造成了不必要的開銷。
public static test getins()}}
return signalins;
}
這是改良後的懶漢模式,這種方式相對於上一種的優點是在呼叫getins的時候並不會每次都進行同步。
懶漢模式在高併發環境下還是有一定的缺陷的。在jdk1.5之後,可以在宣告signalins的時候用volatile修飾,保證每次都從主記憶體去讀取。
靜態內部類模式
public static test getins()
private static class signalins
這種方式不僅延遲了單例的例項化,並且不會導致執行緒不安全。
一般單例模式常用的就是以上幾個方法,下面再記錄下單例的另外兩種:列舉和使用容器。
列舉模式
public static enum signalins
}
定義乙個列舉的元素即為乙個例項。之前幾中模式在使用反序列化操作或者反射時都可以建立乙個新的例項,而列舉有效地避免了。
容器實現單例
private static mapinsmap = new hashmap<>();
public static void holdins(string key, object ins)
}public static object getins(string key)
在程式開始時將多個單例物件放入乙個管理類中。 設計模式之單例模式,學習筆記
所謂的單例模式就是說乙個物件,我們只去例項化一次,在頁面中如果有乙個物件是唯一的,那麼就可以用單例模式。var fn function name fn.prototype.getname function fn.getinstrace function var a fn.getinstrace js...
設計模式學習筆記之單例模式
什麼是單例模式?顧名思義,就是只有乙個例項,也就是說乙個應用程式中只有乙個例項物件.既然乙個系統,乙個應用程式中只有乙個例項,那麼也就說明了如果操作這乙個物件,必然涉及到共享資源,涉及到資源分配問題,資源競爭等問題.那麼我們的應用場景是什麼呢?2.池化技術.比如資料庫的連線池.每個資料庫的可支援的連...
設計模式學習筆記(三)之 單例模式
今天是上班的第一天,由於沒給安排活,也不知道幹啥,於是隨便翻翻csdn看到一篇關於單例模式的講解,覺得寫的很不錯,講的簡單易懂,為了加深記憶 打發時間 寫下這篇部落格。從書上講的來說,單例模式,這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式,單例模式是指在記憶體中只會建立且僅建立一...