創(chuàng)建型模式----單件模式--singleton
1.保證一個(gè)類只有一個(gè)實(shí)例的機(jī)制.2.站在類的設(shè)計(jì)者的角度,強(qiáng)制使一個(gè)類只能有一個(gè)實(shí)例,而不是站在類的使用者角度。
一:簡(jiǎn)單實(shí)現(xiàn)

















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



































































要點(diǎn):
1.singleton不要支持序列化,避免出現(xiàn)多個(gè)實(shí)例,與singleton模式理念沖突
2.singleton只考慮到了對(duì)象的創(chuàng)建管理,沒有考慮到對(duì)象的銷毀管理,在支持垃圾回收的平臺(tái)下(.net,java),一般不需要考慮對(duì)對(duì)象銷毀管理作特別的處理。
3.模式的核心為:控制類的使用者對(duì)類的實(shí)例方法任意使用并使最終只產(chǎn)生一個(gè)實(shí)例。
4.普通實(shí)現(xiàn)方法,每次都需要檢查類的對(duì)象是否已經(jīng)存在,增大開銷,建議使用靜態(tài)初始化方法。
posted on 2007-12-28 00:34 澤來(lái)-王者之劍 閱讀(1145) 評(píng)論(1) 編輯 收藏 所屬分類: 設(shè)計(jì)模式系列