創建型模式----單件模式--singleton
1.保證一個類只有一個實例的機制.2.站在類的設計者的角度,強制使一個類只能有一個實例,而不是站在類的使用者角度。
一:簡單實現

















二:線程安全
1
class singletonTwo
2
{
3
//靜態變量
4
private static singletonTwo stTwo = null;
5
//私有構造器
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 當其它類或線程第二次來調用時,減少相應線程開銷
21
public static singletonTwo getInstanceTwo()
22
{
23
if(stTwo == null)
24
{
25
synchronized(obj)
26
{
27
if(stTwo == null)//此處判斷的作用在于:當第一次初始化時即有多個線程進入第一個 stTwo == null 的判斷塊,同時等待obj的線程釋放。
28
{
29
stTwo = new singletonTwo();
30
}
31
}
32
}
33
return stTwo;
34
}
35
}
優點為:因為實例化語句處于getInstance方法里,即當需要一個singleton實例時,才會產生。這種方法稱為惰性實例化,惰性實例化避免了在不必要一個實例時產生了實例對象。
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

三:靜態初始化



































































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