---------------------- ASP.Net+Android+IOS開發、.Net培訓、期待與您交流! ----------------------
單例模式:
java中單例模式是一種常見的設計模式,單例模式分三種:懶漢式單例、餓漢式單例、登記式單例三種。
單例模式的特點:
1、單例類只能有一個實例。
2、單例類必須自己自己創建自己的唯一實例。
3、單例類必須給所有其他對象提供這一實例。
單例模式確保某個類只有一個實例,而且自行實例化並向整個系統提供這個實例。
如:
1、餓漢式單例類:
1//餓漢式單例類.在類初始化時,已經自行實例化
2publicclass Singleton1 {
3
//私有的默認構造子
4
private Singleton1() {}
5
//已經自行實例化
6
privatestaticfinal Singleton1 single =
new Singleton1();
7
//靜態工廠方法
8
publicstatic Singleton1 getInstance() {
9
return single;
10
}
11 }
2、懶漢式單例類:
1//懶漢式單例類.在第一次調用的時候實例化
2publicclass Singleton2 {
3
//私有的默認構造子
4
private Singleton2() {}
5
//注意,這裏沒有final
6 privatestatic Singleton2 single=null;
7
//靜態工廠方法
8
publicsynchronized
static Singleton2 getInstance() {
9
if (single ==
null) {
10
single = new Singleton2();
11
}
12 return single;
13
}
14 }
3、登記式單例類:
1import java.util.HashMap;
2import java.util.Map;
3//登記式單例類.
4//類似Spring裏面的方法,將類名註冊,下次從裏面直接獲取。
5publicclass Singleton3 {
6
privatestatic Map<String,Singleton3> map =
new HashMap<String,Singleton3>();
7
static{
8
Singleton3 single = new Singleton3();
9
map.put(single.getClass().getName(), single);
10 }
11 //保護的默認構造子
12
protected Singleton3(){}
13
//靜態工廠方法,返還此類惟一的實例
14
publicstatic Singleton3 getInstance(String name) {
15
if(name == null) {
16
name = Singleton3.class.getName();
17
System.out.println("name == null"+"--->name="+name);
18 }
19 if(map.get(name) ==
null) {
20
try {
21
map.put(name, (Singleton3) Class.forName(name).newInstance());
22
} catch (InstantiationException e) {
23
e.printStackTrace();
24
} catch (IllegalAccessException e) {
25
e.printStackTrace();
26 }
catch (ClassNotFoundException e) {
27
e.printStackTrace();
28
}
29 }
30 return map.get(name);
31
}
32 //一個示意性的商業方法
33
public String about() {
34 return "Hello, I am RegSingleton.";
35 }
36 publicstaticvoid main(String[] args) {
37
Singleton3 single3 = Singleton3.getInstance(null);
38
System.out.println(single3.about());
39 }
40 }
---------------------- ASP.Net+Android+IOS開發、.Net培訓、期待與您交流! ----------------------