zoukankan      html  css  js  c++  java
  • 事件委托实现观察者模式

    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

    运行结果如下图:

  • 相关阅读:
    pip install报错:RuntimeError: Python version >= 3.5 required
    简明conda使用指南
    Ninja使用Visual Studio(cl.exe)构建
    cmake设定boost python3
    系统程序员成长计划——像机器一样思考(二)
    在Redis Sentinel环境下,jedis该如何配置
    如何用Go语言实现汉诺塔算法
    pt-online-schema-change的实现原理
    MySQL Sniffer
    如何利用docker快速构建MySQL主从复制环境
  • 原文地址:https://www.cnblogs.com/527289276qq/p/5351558.html
Copyright © 2011-2022 走看看