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


    一. 章前小结

     在前一个章节中,我们通过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             }
  • 相关阅读:
    [HTTP2] HTTP1 probs and HTTP2 saves
    [HTTPS] MAN IN THE MIDDLE (MITM)
    [HTTP] HTTP Verb
    [Node.js] Creating JWTs (JSON Web Tokens) in Node
    [RxJS] Drag and Drop example
    [Webpack 2] Ensure all source files are included in test coverage reports with Webpack
    [Webpack 2] Add Code Coverage to tests in a Webpack project
    android简单的答题游戏
    Java Web----EL(表达式语言)详解
    使用ant构建报错,编码GBK的不可映射字符解决方法
  • 原文地址:https://www.cnblogs.com/yaopengfei/p/7268664.html
Copyright © 2020-2023  润新知