实体的几种单例泛型

此贴不是讨论单利几种写法,而是对现有类进行单利拓展,如string.empty的概念。

直接开门见山来看看单例泛型:

 1     ///Copyright (c) 雾里看花 Q397386036
 2     /// <summary>
 3     /// 单例模式
 4     /// </summary>
 5     /// <typeparam name="T"></typeparam>
 6     public static class Singleton<T>
 7         where T :  new()
 8     {
 9         private readonly static T empty = new T();
10         public static T Empty
11         {
12             get
13             {
14                 return empty;
15             }
16         }
17     }
18 
19     /// <summary>
20     /// List的单例模式
21     /// </summary>
22     /// <typeparam name="T"></typeparam>
23     public static class SingletonList<T>
24     {
25         public static List<T> Empty
26         {
27             get
28             {
29                 return Singleton<List<T>>.Empty;
30             }
31         }
32     }
33     /// <summary>
34     /// Array的单例模式
35     /// </summary>
36     /// <typeparam name="T"></typeparam>
37     public static class SingletonArray<T>
38     {
39         private readonly static T[] empty = new T[0];
40         public static T[] Empty
41         {
42             get
43             {
44                 return empty;
45             }
46         }
47     }
48 
49     public static class SingletonCollection<T>
50     {
51         public static ICollection<T> Empty
52         {
53             get
54             {
55                 return SingletonList<T>.Empty;
56             }
57         }
58     }

 

实际的用途案例:

<a>如果得到一个对象,可能会对他进行null值判断,然后做出一序列的动作,首先我们对这种情况先拓展一个方法:

 1     public static class EntityExtensions
 2     {
 3         public static T Instance<T>(this T t)
 4             where T : class,new()
 5         {
 6             return t ?? Singleton<T>.Empty;
 7         }
 8     }

此时,我们不需要进行null判断,直接用空值对象即可。比如:entity.Instance();

<b>MVC中Create和Edit的写法有很大不同,其实我们完全可以使用单利对象,当做Edit View来初始化View

1         public ActionResult Create()
2         {
3             return View(Singleton<DemoModel>.Empty);
4         }

可能在一般的mvc中体现不出他的价值,但是在特定的一些架构中他的价值就完全体现出来了。比如99出版系统架构中,Model UI 生产过程就会很需要他。

你可能感兴趣的:(泛型)