码迷,mamicode.com
首页 > 其他好文 > 详细

事件委托实现观察者模式

时间:2016-04-04 11:34:17      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

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

 

运行结果如下图:

技术分享

 

事件委托实现观察者模式

标签:

原文地址:http://www.cnblogs.com/527289276qq/p/5351558.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!