1.保證一個類只有一個實例的機制.
2.站在類的設(shè)計者的角度,強制使一個類只能有一個實例,而不是站在類的使用者角度。
一:簡單實現(xiàn)

















二:線程安全
1
class singletonTwo
2
{
3
//靜態(tài)變量
4
private static singletonTwo stTwo = null;
5
//私有構(gòu)造器
6
private singletonTwo(){}
7
//線程對象
8
private static Object obj = new Object();
9
10
//獲取實例方法1 完全保證線程安全,但增大了不必要的線程開銷
11
public synchronized static singletonTwo getInstance()
12
{
13
if(stTwo == null)
14
{
15
stTwo = new singletonTwo();
16
}
17
return stTwo;
18
}
19
20
//獲取實例方法2 當其它類或線程第二次來調(diào)用時,減少相應(yīng)線程開銷
21
public static singletonTwo getInstanceTwo()
22
{
23
if(stTwo == null)
24
{
25
synchronized(obj)
26
{
27
if(stTwo == null)//此處判斷的作用在于:當?shù)谝淮纬跏蓟瘯r即有多個線程進入第一個 stTwo == null 的判斷塊,同時等待obj的線程釋放。
28
{
29
stTwo = new singletonTwo();
30
}
31
}
32
}
33
return stTwo;
34
}
35
}
優(yōu)點為:因為實例化語句處于getInstance方法里,即當需要一個singleton實例時,才會產(chǎn)生。這種方法稱為惰性實例化,惰性實例化避免了在不必要一個實例時產(chǎn)生了實例對象。
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

三:靜態(tài)初始化



































































要點:
1.singleton不要支持序列化,避免出現(xiàn)多個實例,與singleton模式理念沖突
2.singleton只考慮到了對象的創(chuàng)建管理,沒有考慮到對象的銷毀管理,在支持垃圾回收的平臺下(.net,java),一般不需要考慮對對象銷毀管理作特別的處理。
3.模式的核心為:控制類的使用者對類的實例方法任意使用并使最終只產(chǎn)生一個實例。
4.普通實現(xiàn)方法,每次都需要檢查類的對象是否已經(jīng)存在,增大開銷,建議使用靜態(tài)初始化方法。