zoukankan      html  css  js  c++  java
  • Singleton设计模式活学活用: 请求单一 vs 线程单一

    /// <summary>
        /// 在Web Request期间只存在唯一实例的类
        /// 使用了Lazy
        /// </summary>
        public class SingletonPerRequest
        {
            public object Data;
    
            public static readonly string Key = "SingletonPerRequest.Key";
    
            public static SingletonPerRequest Current
            {
                get
                {
                    SingletonPerRequest instance = (SingletonPerRequest)HttpContext.Current.Items[Key];
                    if (instance==null)
                    {
                        instance = new SingletonPerRequest();
                        HttpContext.Current.Items[Key] = instance;
                    }
                    return instance;
                }
            }
        }
    
        /// <summary>
        /// 在一个执行线程中只存在唯一实例的类
        /// 使用了Lazy
        /// </summary>
        public class SingletonPerThread
        {
            public object Data;
    
            public static readonly string Key = "SingletonPerThread.Key";
    
            public static SingletonPerThread Current
            {
                get
                {
                    SingletonPerThread instance = (SingletonPerThread)CallContext.GetData(Key);
                    if (instance == null)
                    {
                        instance = new SingletonPerThread();
                        CallContext.SetData(Key, instance);
                    }
                    return instance;
                }
            }
        }

    这只是个示例,你可以将它改为泛型类,以编写更安全的代码.

    此外,CallContext在Web/Win中,可以移植,所以Web中也建议使用第二种方案.

  • 相关阅读:
    ES集群性能调优链接汇总
    【转】dmesg 时间转换
    广师大笔记汉诺塔
    广师大python学习笔记求派的值
    155. 最小栈(c++)
    160. 相交链表(c++)
    论文 数据集总结
    论文阅读 总结 复习
    121. 买卖股票的最佳时机(c++)
    9. 回文数(c++)
  • 原文地址:https://www.cnblogs.com/rockniu/p/1601020.html
Copyright © 2011-2022 走看看