欢迎光临
我们一直在努力

建站超值云服务器,限时71元/月

   design pattern的singleton是一个虽然简单但很有用处的模式,它的作用就是使类只能有一个实例,不需要实例化,而提供一个唯一的全局切入点。如果再结合上线程,完全可以实现一个定时服务,不象timer控件,它不仅可以应用在windows应用程序中,同样可以应用于web程序中,就象刚才蓝说的那种效果。看下面这个简单的例子吧。

using system;
using system.threading ;

namespace testall
{
    /// <summary>
    /// 一个web job的示例类
    /// </summary>
    /// <remarks>符合design pattern的singleton模式</remarks>
    public class teststatic
    {
        /// <summary>
        /// 定时间隔
        /// </summary>
        /// <remarks>通过修改这个常量决定间隔多长时间做某件事</remarks>
        const int delay_times = 1000 ;

        /// <summary>
        /// 一个计数器
        /// </summary>
        private int m_intcounter = 0;

        /// <summary>
        /// 是否退出
        /// </summary>
        private bool m_bcanexit = false ;

        /// <summary>
        /// 线程
        /// </summary>
        private thread thread ;

        /// <summary>
        /// 自身实例
        /// </summary>
        /// <remarks>注意,这是实现singleton的关键</remarks>
        private  static teststatic instance = new teststatic() ;

        public int counter
        {
            get
            {
                return this.m_intcounter ;
            }
            set
            {
                this.m_intcounter = value ;
            }
        }

        public bool canexit
        {
            set
            {
                this.m_bcanexit = value ;
            }
        }

        /// <summary>
        /// 构造函数
        /// </summary>
        public teststatic()
        {
            //
            // todo: add constructor logic here
            //
            this.m_intcounter = 0 ;
            console.writeline("constructor is running") ;
            this.thread = new thread(new threadstart(threadproc)) ;
            thread.name = "online user" ;
            thread.start() ;
            console.writeline("完毕") ;
        }

        /// <summary>
        /// 实现singleton的关键
        /// </summary>
        /// <returns>类本身的一个实例</returns>
        /// <remarks>唯一的全局切入点</remarks>
        public static teststatic getinstance()
        {
            return instance ;
        }

        /// <summary>
        /// 线程工作函数
        /// </summary>
        /// <remarks>想做什么写在这儿</remarks>
        private void threadproc()
        {
            while(!this.m_bcanexit)
            {
                this.m_intcounter ++ ;
                console.writeline(this.m_intcounter.tostring()) ;
                thread.sleep(delay_times) ;
            }
        }

        static void main(string[] args)
        {
            //
            // todo: add code to start application here
            //
            console.writeline(teststatic.getinstance().counter.tostring()) ;
            console.read() ;
            teststatic.getinstance().canexit = true ;
        }

    }

}

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 »
分享到: 更多 (0)

相关推荐

  • 暂无文章