第四节:单例模式对缓存进行管理

一. 章前小结

 在前一个章节中,我们通过IOC的的模式解决了发布后动态切换缓存类型问题,通过CallContext数据槽解决了单线程的实例唯一的问题,那么如果解决全局实例唯一(即多线程内实例唯一),我们很容易的想到了单例模式,提到单例模式,我们很容易想到单例模式的三种形式。

   详见:单例模式

二. 构建步骤

  利用静态构造函数的单例模式来构建缓存管理类CacheManager。

 1   /// <summary>
 2     /// 缓存管理类(单例模式管理)
 3     /// </summary>
 4     public class CacheManager
 5     {
 6         private static string ICacheDllName = ConfigurationManager.AppSettings["ICacheDllName"];
 7         private static string ICacheClassName = ConfigurationManager.AppSettings["ICacheClassName"];
 8         private CacheManager()
 9         {
10 
11         }
12         private static ICache _cache = null;
13 
14         //静态构造函数且无参数,只有类第一次创建的时候初始化,而且只能调用一次
15         static CacheManager()
16         {
17             Console.WriteLine("--------------------------我要创建对象了----------------------------");
18             Assembly assembly = Assembly.Load(ICacheDllName);
19             Type type = assembly.GetType(ICacheClassName);
20             _cache = (ICache)Activator.CreateInstance(type);
21         }
22         public static ICache CreateInstance()
23         {
24             return _cache;
25         }
26     }

 三. 调用

 1   {
 2                 //发现利用单例模式,既解决了单线程内对象唯一性,也解决了多线程的对象唯一性,只创建一次
 3                 Console.WriteLine("------------------ 4.多线程测试对象创建-单例模式(开启三个线程)   ------------------------");
 4                 TaskFactory taskFactory = new TaskFactory();
 5                 List<Task> taskList = new List<Task>();
 6                 for (int i = 0; i < 3; i++)
 7                 {
 8                     Task task = taskFactory.StartNew(() =>
 9                     {
10                         GetData3();
11                     });
12                     taskList.Add(task);
13                 }
14                 //线程等待
15                 taskFactory.ContinueWhenAll(taskList.ToArray(), t =>
16                 {
17                     Console.WriteLine("全部完工了");
18                 });
19             }
原文地址:https://www.cnblogs.com/yaopengfei/p/7268664.html