• 事件委托实现观察者模式


    Subject 通知者接口:

      public interface Subject
        {
            void Notify();
            string SubjectState
            {
                get;
                set;
            }
        }
    View Code

    StockObserver 看股票同事类:

     /// <summary>
        /// 看股票同事类
        /// </summary>
        public class StockObserver
        {
            private string name;
    
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
    
            private Subject sub;
    
            public Subject Sub
            {
                get { return sub; }
                set { sub = value; }
            }
    
            public StockObserver() { }
    
            public StockObserver(string name, Subject sub)
            {
                this.Name = name;
                this.Sub = sub;
            }
    
            /// <summary>
            /// 关闭股票行情
            /// </summary>
            public  void CloseStockMarket()
            {
                Console.WriteLine("{0} {1}关闭股票行情,继续工作!", Sub.SubjectState, this.Name);
            }
        }
    View Code

    NBAObserver 看NBA的同事类:

      /// <summary>
        /// 看NBA的同事类
        /// </summary>
        public class NBAObserver 
        {
            private string name;
    
            public string Name
            {
                get { return name; }
                set { name = value; }
            }
    
            private Subject sub;
    
            public Subject Sub
            {
                get { return sub; }
                set { sub = value; }
            }
    
            public NBAObserver() { }
    
            public NBAObserver(string name, Subject sub)
            {
                this.Name = name;
                this.Sub = sub;
            }
    
            /// <summary>
            /// 关闭NBA直播
            /// </summary>
            public  void CloseNBADirectSeeding()
            {
                Console.WriteLine("{0} {1}关闭NBA直播,继续工作!", Sub.SubjectState, this.Name);
            }
        }
    View Code

    声明一无参数,无返回值的委托:

       public delegate void EventHandler();

    Boss 老板类:

     /// <summary>
        /// 老板类
        /// </summary>
        public class Boss : Subject
        {
            //声明一事件Update,类型为委托EventHandler
            public event EventHandler Update;
    
            private string subjectState;
    
            public string SubjectState
            {
                get { return subjectState; }
                set { subjectState = value; }
            }
            
    
            public void Notify()
            {
                if (Update!=null)
                {
                    //调用事件
                    Update();
                }
            }
        }
    View Code

    Secretary 秘书类:

     /// <summary>
        /// 秘书类
        /// </summary>
        public class Secretary : Subject
        {
            //声明一事件Update,类型为委托EventHandler
            public event EventHandler Update;
    
            private string subjectState;
    
            public string SubjectState
            {
                get { return subjectState; }
                set { subjectState = value; }
            }
    
    
            public void Notify()
            {
                if (Update != null)
                {
                    //调用事件
                    Update();
                }
            }
        }
    View Code

    客户端代码:

    static void Main(string[] args)
            {
                Boss bill = new Boss();
    
                //看股票的同事
                StockObserver tongshi1 = new StockObserver("小明", bill);
                NBAObserver tongshi2 = new NBAObserver("小王", bill);
    
                //注册事件
                bill.Update += new EventHandler(tongshi1.CloseStockMarket);
                bill.Update += new EventHandler(tongshi2.CloseNBADirectSeeding);
    
                //老板回来
                bill.SubjectState = "我比尔回来了!";
    
                //发出通知
                bill.Notify();
    
                Console.ReadKey();
            }
    View Code

    运行结果如下图:

  • 相关阅读:
    现在实习生做什么好找工作?
    MSsql数据库修改数据类型Float到decimal的问题处理
    首记,一种新的企业信息化平台开发方案——AgileEAS.NET框架
    在Winform中使用DataGirdView时的添加和删除操作
    如何通过AgileEAS.NET快速搭建属于你的企业应用(一)——解决方案的建立
    浅谈企业自主信息化开发模式
    AgileEAS开发中关于实体类和DataTable的取舍——用linq+orm来缩短你的开发周期
    如何通过AgileEAS.NET快速搭建属于你的企业应用(二)——智能版本升级和多数据库访问的分布式部署
    整站黑白页
    布局管理器
  • 原文地址:https://www.cnblogs.com/527289276qq/p/5351558.html
Copyright © 2020-2023  润新知