定義
確保一個類只有一個實例,并提供全局訪問點
設計原則
在JAVA中實現(xiàn)單件模式需要一個私有的構造器、一個靜態(tài)方法和一個靜態(tài)變量;
確定在性能和資源上的限制,然后小心地選擇適當?shù)姆桨竵韺崿F(xiàn)單件,以解決多線程的問題;
如果不是采用第五版的java 2,雙重檢查鎖實現(xiàn)會失效;
實現(xiàn)
1、lazy singleton
1
public class Singleton{
2
3
private static Singleton uniqueInstance;
4
5
private Singleton(){} //私有構造器
6
7
public static Singleton getInstance(){
8
9
if(uniqueInstance == null){
10
11
uniqueInstance = new Singleton();
12
}
13
14
return uniqueSingleton
15
}
16
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

2、處理多線程
這是保證可行的最直接做法,對于性能如果沒有考慮,可以直接用這個方法。
1
public class Singleton{
2
3
private static Singleton uniqueInstance;
4
5
private Singleton(){} //私有構造器
6
7
public static synchronized Singleton getInstance(){
8
9
if(uniqueInstance == null){
10
11
uniqueInstance = new Singleton();
12
}
13
14
return uniqueSingleton
15
}
16
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

3、急切實例化
1
public class Singleton{
2
3
private static uniqueInstance = new Singleton();
4
5
private Singleton(){}
6
7
public static Singleton getInstance(){
8
9
return uniqueInstance;
10
}
11
12
}

2

3

4

5

6

7

8

9

10

11

12

4、用“雙重檢查加鎖”,在getInstance( )中減少使用同步
由于沒有性能上考慮,所以這個方法似乎殺雞用了牛刀。另外這個方法還得確定使用的是java5以上的版本。
1
package com.sailor.singleton;
2
3
/**
4
* @author sailor
5
* Jul 23, 2008 9:46:17 AM
6
*/
7
public class Singleton {
8
9
private volatile static Singleton uniqueInstance;
10
11
private Singleton(){}
12
13
public static Singleton getInstance(){
14
if(uniqueInstance == null){
15
synchronized(Singleton.class){
16
if(uniqueInstance == null){
17
uniqueInstance = new Singleton();
18
}
19
}
20
}
21
return uniqueInstance;
22
}
23
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23
