观察者模式,用于处理类似订阅,满足一定条件之后执行的任务或者事件

1.声明委托,并添加到委托集合中

     
    int _temperture; //温度
    public delegate void DelegateHeater(int temperture);//委托
    List<DelegateHeater> list_del = new List<DelegateHeater>();//委托集合
       
       /// <summary>
       /// 注册委托
       /// </summary>
       /// <param name="R_header"></param>
       public void Register(DelegateHeater del_header)
       {
           list_del.Add(del_header);
       }
    
        /// <summary>
       /// 注销委托
       /// </summary>
       /// <param name="C_header"></param>
       public void CancelRegister(DelegateHeater del_header)
       {

           list_del.Remove(del_header);
       }

      

2.声明委托要执行的事件,并通知注册的事件

       /// <summary>
       /// 加热水温
       /// </summary>
       public void Boliwater()
       {
           for (int i = 0; i < 100; i++)
           {
               if (i > 95)
               {
                   _temperture = i;
                   Notify();
                   break;
               }
           }
       }

   /// <summary>
       /// 通知注册的委托事件
       /// </summary>
       public void Notify()
       {
           list_del.ForEach((lst) => {
               lst(_temperture);
           });
       }

   /// <summary>
       /// 提醒事件
       /// </summary>
       public void AlerMSG(int tempture)
       {
           
           MessageBox.Show("水温为:" + tempture);
       }


       /// <summary>
       /// 显示事件
       /// </summary>
       public void ShowMSG(int tempture)
       {

           MessageBox.Show("显示水温为:" + tempture);
       }

 

 3.调用代码,实例

            Heater ht = new Heater();
            ht.Register(new Heater.DelegateHeater(ht.AlerMSG));//注册提示事件
            ht.Register(new Heater.DelegateHeater(ht.ShowMSG));//注册显示事件

            ht.Boliwater(); //开始任务

            ht.CancelRegister(new Heater.DelegateHeater(ht.ShowMSG)); //注销事件
            ht.CancelRegister(new Heater.DelegateHeater(ht.AlerMSG));//注销事件

 

posted @ 2014-08-25 10:42  寻找灯塔ing  阅读(192)  评论(0)    收藏  举报