一、設計目的:讓項目中只顯示一個實例對象 二、設計步驟: 三、項目相關名詞或知識點解釋 此處類類型:如果當前類為SingleCase,則此靜態變數類型也要為SingleCase類型, 即在此處定義的靜態變數的類型要和這個當前類的類型相同 定義單例實例變數時,儘量都用instance(實例)來指代,方 ...
一、設計目的:讓項目中只顯示一個實例對象
二、設計步驟:
- 創建一個類;
- 構建類類型靜態變數;
- 定義返回值類為單例類型的靜態方法;
- 判斷靜態變數instance是否為空:如果為空,就創建實例,然後給單例類中的欄位進行賦值;如果不為空:返回此變數(return instance;)
- 單例模式創建成功;
三、項目相關名詞或知識點解釋
- 此處類類型:如果當前類為SingleCase,則此靜態變數類型也要為SingleCase類型,
- 即在此處定義的靜態變數的類型要和這個當前類的類型相同
- 定義單例實例變數時,儘量都用instance(實例)來指代,方便以後自己和他人對代碼的閱讀。
- 靜態變數在記憶體中只有一個,只占一份兒
四、相關源碼
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace SingleCaseModel00 8 { 9 /// <summary> 10 /// 1.創建這麼一個類 11 /// </summary> 12 class SingleCase 13 { 14 //2.構建類類型靜態變數 15 //此處類類型:如果當前類為SingleCase,則次靜態變數類型也要為SingleCase類型, 16 //即在此處定義的靜態變數的類型要和這個當前類的類型相同 17 //定義單例實例變數時,儘量都用instance(實例)來指代,方便閱讀 18 //靜態變數在記憶體中只有一個,只占一份兒 19 public static SingleCase instance = null; 20 //10.定義一個欄位,用來進行測試 21 public string name; 22 //3.定義返回值類為單例類型的靜態方法 23 public static SingleCase getInstance(string n) 24 { 25 //4.判斷靜態變數instance是否為空 26 if (instance == null) 27 { 28 //5.如果為空,就創建實例 29 instance = new SingleCase(); 30 //6.給單例類中的欄位進行賦值 31 instance.name = n; 32 } 33 //7.返回此變數 34 return instance; 35 } 36 //8.如果這個類中還有其他的欄位,那麼直接在下麵寫出來即可 37 //如下: 38 //public string Name; 39 //public int Age; 40 } 41 class Program 42 { 43 static void Main(string[] args) 44 { 45 //9.調用上述單例類中方法,測試單例類 46 SingleCase s1 = SingleCase.getInstance("我是第一次傳過來的參數"); 47 SingleCase s2 = SingleCase.getInstance("我是第二次傳過來的參數"); 48 Console.WriteLine(s1.name); 49 Console.WriteLine(s2.name); 50 Console.ReadKey(); 51 } 52 } 53 }
五、結果展示
六、對結果的解釋說明
兩次輸出的結果是一樣的,這是因為當第一次傳入參數的時候,instance 為空,執行上面的方法後,name的值就變成了“我是第一次傳過來的參數”,
當你第二次再次傳入參數時,由於靜態變數在記憶體中只有一個,只占一份兒,所以此時instance 已經不為空了,還會直接輸出第一個參數是的instance 值,
所以,不管你輸入幾次參數,輸出的結果都會是第一次輸出的那個instance 值,這也就是單例模式的機制所在。