![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 E-Troy 版主 ![]()
![]() ![]() |
C#有Java物件導向的特性,和C/C++的執行效能,運用在Design Pattern的設計結構,能充份發揮C#的特性。 談論Design Pattern時,我們談論程式產生的「需求」,程式裡有一種類別設計模式,必須保證它們在系統中只存在一個實例,才能確保它們的邏輯正確性、以及良好的效率。 以下是「需求的範例」: 上面的語法在Sngle-Thread情況當然看似正常執行沒問題,但是在Multi-Thread的情況下卻會出現錯誤的情況。 如兩個Thread同時運行到 if (instance == null)判斷是否被實體化,一個Thread判斷為True後,在產生 SingleThread_Singleton之前,另一個線程也判斷(instance == null),結果也為True。 這樣就違背了Singleton模式的原則,一個類別只有一個實例: 這樣的程式結構就能在Multi-Thread情況下實現Singleton。 當然上述是以Dynamic方式呈現,如果要用Static的方,可以改寫下列的方式: 這樣的設計結構,效果是一樣的,唯一不同的是,是記憶體的配置,Static在程式裡的生命週期是只有當程式結束執行,才會移除,這是要注意的地方。 |