1. 程式人生 > >單例模式實現的方式以及使用場景

單例模式實現的方式以及使用場景

【概要】

   單例模式在專案設計和開發,以及Spring框架中使用的比較多,通過自己在專案中總結的經驗和大家一起分享,希望對大家的學習和專案的設計會有所幫助。

【靜態方法】

通過定義private static final service,類載入器載入類的時候開始建立物件,後面程式要是使用物件時直接從記憶體堆區域獲取,定義private Service(){}不能通過new Service()去建立物件,從而實現了物件的第一次初始化,後面呼叫都是第一次的例項。

public class Service {
	
	private static final Service service = new Service();

	private Service(){};
	
	public static Service getInstance(){
		return  service;
	}
}

【單個元素的列舉】

 列舉的定義在專案中使用的比較多,列如:欄位的狀態,可以使用列舉來替代public static final 定義,寫起了來比較方便簡單,更加明確表示該欄位的特性,定義列舉中每個元素都是例項物件,如果將列舉中只定義一個元素,提供公共的方法,就能夠實現單例,而且這種方式是最好的也是最簡單的

public enum Provider {
	INSTANCE;
	
	public void get(){
		System.out.println("Apple get menthod.");
	}
}

【使用場景】

 在一個專案中將一些屬性:檔案路徑,連線資料庫的使用者名稱和密碼等等其它可能會跟隨伺服器的不同,需要更改的配置,我們將這樣的屬性類定義成為一個專案的配置類,這個類只需要在專案啟動時例項化一次性,在專案其它業務需要時只要從記憶體中拿出來,不需要重複在記憶體中開闢空間,這樣可以減少不必要的記憶體開銷,提高程式的效能,儘可能避免出現記憶體溢位問題(OutofMemoryException), Spring 框架中使用的比較頻繁,在Spring配置檔案定義一個<bean>時可以通過屬性Scope來選擇定義的bean是單例(Singleton),原型(Prototype),請求(Request),會話(Session)

單例:只有一個例項物件,需要使用時共享這個物件

原型:可以建立任意一個或者多個物件

請求:物件例項的生命週期在HTTP Request有效,響應後直接銷燬物件,釋放記憶體

會話:物件例項的生命週期在HTTP Session有效,Session失效後銷燬物件,釋放記憶體