dotnet3.5下Singleton辅助类实现

      经常要用到Singleton模式,通常情况下我们是为那个类写一个static method来创建对象。.net3.5下,可以封装这么一个辅助类,
看代码如下:

 1       #region  Singleton
 2       ///   <summary>
 3       ///  Used for classes that are single instances per appdomain
 4       ///   </summary>
 5       public   static   class  Singleton
 6      {
 7           private   static   class  Storage < T >
 8          {
 9               internal   static  T s_instance;
10          }
11 
12           ///   <summary>
13           ///  Gets the instance.
14           ///   </summary>
15           ///   <typeparam name="T"> Func <T></typeparam>
16           ///   <param name="op"> The op. </param>
17           ///   <returns> T </returns>
18           ///   <remark> Author : PetterLiu 2008-12-2816:02   http://wintersun.cnblogs.com   </remark>
19           public   static  T GetInstance < T > (Func < T >  op)
20          {
21               if  (Storage < T > .s_instance  ==   null )
22              {
23                   lock  ( typeof (Storage < T > ))
24                  {
25                       if  (Storage < T > .s_instance  ==   null )
26                      {
27                          T temp  =  op();
28                          System.Threading.Thread.MemoryBarrier();
29                          Storage < T > .s_instance  =  temp;
30                      }
31                  }
32              }
33               return  Storage < T > .s_instance;
34          }
35 
36           ///   <summary>
37           ///  Gets the instance.
38           ///   </summary>
39           ///   <typeparam name="T"> T </typeparam>
40           ///   <returns> T </returns>
41           ///   <remark> Author : PetterLiu 2008-12-2816:02   http://wintersun.cnblogs.com   </remark>
42           public   static  T GetInstance < T > ()
43               where  T :  new ()
44          {
45               return  GetInstance(()  =>   new  T());
46          }
47      }
48       #endregion

UnitTest:
Test

http://wintersun.cnblogs.com

你可能感兴趣的:(Singleton)