观察者模式生活中的一个应用

场景:当公司每个月向你支付工资的时候,将会向你发送一条短信通知

Step1:首先,我们需要定义一个委托,通过委托将两个类的交互进行了绑定,当公司转账的方法Gapes()调用后,触发委托类型的SaveMoney事件,而该事件将被委托给用户(User)的通知(Notify)方法处理

// <summary>
   ///定义代理
   /// </summary>
   /// <param name="sender"></param>
   /// <param name="e"></param>
   public delegate void DelegateMonitorCustomer(object sender, CustomerEventArgs e);
  
    /// <summary>
    /// 银行卡
    /// </summary>
   public class Account
    {
       /// <summary>
       /// 转帐人姓名
       /// </summary>
       public string  Sender { get; set; }
       //转账金额
       public  decimal Money { get; set; }

       public event DelegateMonitorCustomer SaveMoney;
       public void Gapes()
       {
           CustomerEventArgs e = new CustomerEventArgs();
           e.Sender = this.Sender;
           e.Money = this.Money;
           SaveMoney(this, e);
       }
      
    }

   public class CustomerEventArgs : EventArgs
   {
       public string Sender { get; set; }
       public decimal Money { get; set; }
   }

public class User
    {
       public void Notify(object sender,CustomerEventArgs e)
       {
           StringBuilder resutl = new StringBuilder();
           resutl.Append(e.Sender+"向您的卡中转入"+e.Money+"元钱");
           resutl.Append("时间:" + DateTime.Now.ToString());
           Console.WriteLine(resutl);

       }
    
    }

  class Program
    {
        static void Main(string[] args)
        {
            Account account = new Account();
            account.Sender = "爱施德股份";
            account.Money = 5000;
            User box=new User();
            account.SaveMoney+=new DelegateMonitorCustomer(box.Notify);
            account.Gapes();
        }

     
    }

该文章经过本人整理所得,欢迎转载,转载时请加上本文地址;本文基于署名 2.5 中国大陆许可协议发布,请勿演绎或用于商业目的,但是必须保留本文的署名张志涛(包含链接如您有任何疑问或者授权方面的协商,请给我留言
原文地址:https://www.cnblogs.com/zhangzt/p/3079193.html