【設計模式】單例模式的理解與場景舉例
軟件設計常用的一種設計模式 —— 單例模式
體現:在應用這個模式時,單例對象的類必須保證只有一個實例存在。
好處:許多時候整個系統只需要擁有一個全局的對象,這樣有利於我們協調整個系統的行為。
場景舉例
1.服務器的配置信息放在一個文件中,這些配置數據由一個單例對象統一讀取,然後服務進程中的其他對象再通過這個單例對象讀取配置信息,這樣也簡化了復雜環境下的配置管理。
2.windows的task manager(任務管理器)就是單例的,我們並不能同時打開兩個。
3.多線程的線程池一般也是單例模式的,因為線程池要方便對線程進行控制管理。
實現方式
實現單例模式的對象類中構造函數是私有的,這樣其他代碼就不能通過調用該構造函數實例化對象,只能通過該類的靜態方法(通常使用getInstance這個名詞)來得到該類的唯一實例。
類別:
不加鎖(synchronized)的懶漢單例模式,不支持多線程,實際上也稱不上單例模式。
public class Singleton{
private Singleton(){
}
private static Singleton singleton;
public static Singleton getInstance(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}
}
進化一點點的話,加上synchronized關鍵詞。
public class Singleton{
private static Singleton singleton;
private Singleton(){}
public static synchronized getInstance(){
if(singletion == null){
singletion = new Singletion();
}
return singletion;
}
}
或者,但是這樣容易產生垃圾。餓漢式倒是加載很快,只是會占據一定內存。
public class Singletion{
private static Singletion singleton = new Singletion();
private Singletion(){}
public static Singletion getInstance(){
return singleton;
}
}
最好的一種方式,枚舉。簡潔、且自動支持序列化機制,絕對防止多次實例化。
public enum Singleton{
INSTANCE;
public void method(){}
}
【設計模式】單例模式的理解與場景舉例