单例和单态

单例:只存在唯一的一个实例。

 1 /// <summary>
 2 /// 单例模式。
 3 /// </summary>
 4 public class Singleton
 5 {
 6     // 该字段负责存储 Singleton 的唯一实例。
 7     private static Singleton s_singleton = null;
 8 
 9     /// <summary>
10     /// 私有构造器,不允许其它类调用。
11     /// </summary>
12     private Singleton()
13     {
14     }
15 
16     /// <summary>
17     /// 获取 <see cref="Singleton"/> 的新实例。
18     /// </summary>
19     /// <returns><see cref="Singleton"/> 的新实例。</returns>
20     public static Singleton GetInstance()
21     {
22         if (s_singleton != null) return s_singleton;
23 
24         Singleton tmp = new Singleton();
25         Interlocked.CompareExchange(ref s_singleton, tmp, null);
26         return s_singleton;
27     }
28 }

单态:可以有多个实例,但它们共享相同的状态。

 1 /// <summary>
 2 /// 单态模式。
 3 /// </summary>
 4 public class Monostate
 5 {
 6     // 该类的所有实例,共享这个静态字段的值。
 7     private static Int32 s_state = 0;
 8 
 9     /// <summary>
10     /// 获取状态信息。
11     /// </summary>
12     /// <returns>状态信息。</returns>
13     public Int32 GetState()
14     {
15         // 这里可以处理其它事情。
16         return (s_state + 5);
17     }
18 }

完。

原文地址:https://www.cnblogs.com/yyzj/p/6605628.html