java單例形式應用及留意事項。本站提示廣大學習愛好者:(java單例形式應用及留意事項)文章只能為提供參考,不一定能成為您想要的結果。以下是java單例形式應用及留意事項正文
1. 解釋
1)單例形式:確保一個類只要一個實例,自行實例化並向體系供給這個實例
2)單例形式分類:餓單例形式(類加載時實例化一個對象給本身的援用),懶單例形式(挪用獲得實例的辦法如getInstance時才會實例化對象)(java中餓單例形式機能優於懶單例形式,c++中普通應用懶單例形式)
3)單例形式要素:
a)公有結構辦法
b)公有靜態援用指向本身實例
c)以本身實例為前往值的私有靜態辦法
2.實例
餓單例形式:
package com.wish.modedesign;
public class HungrySingleton {
private static HungrySingleton instance = new HungrySingleton();
private HungrySingleton(){
}
public static HungrySingleton getInstance(){
return instance;
}
}
懶單例形式:
package com.wish.modedesign;
public class Singleton {
private Singleton(){
}
private static Singleton instance;
public static synchronized Singleton getInstance(){ //多線程時留意線程平安
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
測試類Driver.java
package com.wish.modedesign;
public class Driver {
public static void main(String[] args) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println(s1==s2); //true
}
}
3.長處和實用場景
1)單例形式的長處:
在內存中只要一個對象,節儉內存空間。
防止頻仍的創立燒毀對象,可以進步機能。
防止對同享資本的多重占用。
可以全局拜訪。
2)實用場景:
須要頻仍實例化然後燒毀的對象。
創立對象時耗時過量或許耗資本過量,但又常常用到的對象。
有狀況的對象類對象。
頻仍拜訪數據庫或文件的對象。
4.應用時留意事項
1)應用時不克不及用反射形式創立單例,不然會實例化一個新的對象
2)應用懶單例形式時留意線程平安成績
3)餓單例形式和懶單例形式結構辦法都是公有的,因此是不克不及被繼續的,有些單例形式可以被繼續(如掛號式形式)