一、單例模式是什麼? 定義:確保一個類僅僅能產生一個實例,並且提供一個全局訪問點來獲取該實例。 二、單例模式怎麼用? 1 class SingleCase 2 { 3 public string Name{get;set;} 4 public static SingleCase mySingle = ...
一、單例模式是什麼?
定義:確保一個類僅僅能產生一個實例,並且提供一個全局訪問點來獲取該實例。
二、單例模式怎麼用?
1 class SingleCase 2 { 3 public string Name{get;set;} 4 public static SingleCase mySingle = null; 5 public static object Flag = new object(); 6 7 public static SingleCase getInstance(string name) 8 { 9 //判斷是否實例化過 10 if(mySingle == null) 11 { 12 //進入lock 13 lock(Flag) 14 { 15 //判斷是否實例化過 16 if(mySingle == null) 17 { 18 mySingle = new SingleCase(); 19 mySingle.Name = name 20 } 21 } 22 } 23 return mySingle; 24 } 25 }View Code
三、為什麼用單例模式?
對於系統中的某些類來說,只有一個實例很重要,例如,一個系統中可以存在多個列印任務,但是只能有一個正在工作的任務;一個系統只能有一個視窗管理器或文件系統; 一個系統只能有一個計時工具或ID(序號)生成器。如在Windows中就只能打開一個任務管理器。如果不使用機制對視窗對象進行唯一化,將彈出多個視窗,如果這些視窗顯示的內容完全一致,則是重覆對象,浪費記憶體資源; 如果這些視窗顯示的內容不一致,則意味著在某一瞬間系統有多個狀態,與實際不符,也會給用戶帶來誤解,不知道哪一個才是真實的狀態。因此有時確保系統中某個對象的唯一性即一個類只能有一個實例非常重要。如何保證一個類只有一個實例並且這個實例易於被訪問呢?定義一個全局變數可以確保對象隨時都可以被訪問,但不能防止我們實例化多個對象。一個更好的解決辦法是讓類自身負責保存它的唯一實例。 這個類可以保證沒有其他實例被創建,並且它可以提供一個訪問該實例的方法。這就是單例模式的模式動機。
四、使用場景
- Web應用的配置對象的讀取,一般也應用單例模式,這個是由於配置文件是共用的資源。
- 應用程式的日誌應用,一般都何用單例模式實現,這一般是由於共用的日誌文件一直處於打開狀態,因為只能有一個實例去操作,否則內容不好追加