第1章 單例模式(Single Pattern)

2021-09-06 15:31:31 字數 3701 閱讀 3083

原文 第1章 單例模式(single pattern)

單例模式就是保證在整個應用程式的生命週期中,在任何時刻,被指定的類只有乙個例項,並為客戶程式提供乙個獲取該例項的全域性訪問點。

一、常用模式:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

publicclasssingleton

publicstaticsingleton getinstance()

returninstance;

}

}

這種模式只適用在單執行緒下,並沒有考慮到執行緒併發的問題,在多執行緒中,可能出現兩個執行緒同時獲取instance的例項,可能會出現多個例項物件。

二、多執行緒下lazy模式:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

publicclasssingleton

publicstaticsingleton getinstance()

}

}

returninstance;

}

}

使用了lock鎖,可以較好的解決多執行緒下單例模式的實現,lock鎖保證同一時間內只有乙個執行緒能訪問lock裡面的語句塊,比較有效的解決效能的開銷。

三、餓漢模式

1

2

3

4

5

6

7

8

9

10

11

12

13

publicsealedclasssingleton

publicstaticsingleton getinstance()

}

該類標記為sealed以阻止發生派生,而派生可能會增加例項。使用的readonly關鍵可以跟static一起使用,用於指定該常量是類別級的,它的初始化交由靜態建構函式實現,並可以在執行時編譯。在這種模式下,無需自己解決執行緒安全性問題,clr會給我們解決。由此可以看到這個類被載入時,會自動例項化這個類,而不用在第一次呼叫getinstance()後才例項化出唯一的單例物件。

四、延遲載入

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

publicsealedclasssingleton

publicstaticsingleton instance

}

classnested

internalstaticreadonlysingleton instance =newsingleton();

}

}

這種方法用的比較的少,但是也是一種不錯的方法。

設計模式系列文章入口:

設計模式第1式 單例模式

所謂單例模式,就是採用一定方式,保證在整個系統中,對於某個類只有乙個物件存在,且該類只提供乙個獲取物件例項的方法。比如hibernate的sessionfactory,他充當資料儲存源的 並負責建立session物件。sessionfactory並不是輕量級的,一般情況下,乙個專案通常只需要乙個se...

1 單例模式

乙個類只能有乙個例項。比如印表機這種東西。trick在於 變數,構造方法都必須為private,所以其他類new它的構造方法是不行的,直接呼叫變數也不行。只能呼叫getinstance 方法 其他被public修飾的方法。getinstance 方法記得用public修飾。原理 public cla...

1 單例模式

某個物件只需要乙個例項的情況,比方說gamemanager,resourcemanagerusing system namespace 單例模式 定義公有方法提供乙個全域性訪問點,同時你也可以定義公有屬性來提供全域性訪問點 public static singleton getinstance 構造...