单件模式在报表中的使用

时间:2007-08-22 11:01:12  来源:  作者:

         大家可能知道在复杂的并且速度较慢的报表,我们就使用先计算数据,然后再缓存起来,然后在访问报表的时候把直接读缓存就行,所以就可能有"重算" 的功能,来更新这个缓存,所以我们就要限制,在有人重算的时候,保证别人不能重算,在单一的时刻只能一个人在重算,我现在就把我刚学的代码共享出来

using System;

namespace SigletonPattern.Sigleton
...{
    /**//// <summary>
    /// 功能:在C#用双重锁定实现单件模式
    /// 编写:jiekeng     /// 日期:2006年10月20日
    /// </summary>
    public class DoubLockSigleton
    ...{    

        private static volatile DoubLockSigleton instance;
        
        /**//// <summary>
        /// 辅助锁对象,本身没有意义 
        /// </summary>
        private static object syncRoot = new Object();

        /**//// <summary>
        /// 构造方法改为Private
        /// </summary>
        private DoubLockSigleton()
        ...{
            
        }

        public static DoubLockSigleton Instance
        ...{
            get 
            ...{
                if (instance == null)
                ...{
                    lock (syncRoot)
                    ...{
                        if (instance == null)
                            instance = new DoubLockSigleton();
                        return instance;
                    }
                }
                else
                ...{
                    return null;
                }
            }
        }
        public static void SetInit()
        ...{
             instance = null;
        }
    }
}

这是核心的代码,我们现在使用客户调用,看看有

  DoubLockSigleton s1 = DoubLockSigleton.Instance;
        if (s1 != null)
        ...{
            Response.Write(s1.ToString());
        }
        else
        ...{
            Response.Write("<script language='javascript'>window.alert('已经有人在重算')</script>");
        }

然后是进行类的初始化,不然的话老是"有人在重算"那可不行,好了,一个简单的模型就出来了

 

文章评论

共有 位网友发表了评论 查看完整内容