zoukankan      html  css  js  c++  java
  • C# 观察者模式(Observer)

    理解:订阅-发布。把所有需要通知的对象添加到发布者类里面。发布者更改自己状态后通知观察者

    代码:

    using System.Collections.Generic;
    using System.Windows.Forms;

    namespace DesignMode.Observer
    {
        //抽象发布者
        public abstract class Group
        {

            public abstract void Add(Friend friend);
            public abstract void Remove(Friend friend);
            public abstract void Notify();
        }


        public class Weibo : Group
        {
            private string state;
            public string State
            {
                get { return state; }
                set { state = value; }
            }

            private IList<Friend> subs = new List<Friend>();
            public override void Add(Friend friend)
            {
                subs.Add(friend);
            }
            public override void Remove(Friend friend)
            {
                subs.Remove(friend);
            }
            public override void Notify()
            {
                foreach (Friend f in subs)
                {
                    f.Accept();
                }
            }
        }

        // 抽象订阅者
        public abstract class Friend
        {
            public abstract void Accept();
        }

        public class ZhangSan : Friend
        {
            private string _myState;
            private string _name;
            private Weibo _wb;

            public ZhangSan(Weibo wb, string name)
            {
                this._name = name;
                this._wb = wb;
            }

            public override void Accept()
            {
                _myState = _wb.State;
                if (_myState.Equals("发送"))
                {
                    MessageBox.Show(_name + "收到WB信息");
                }
                else
                {
                    MessageBox.Show(_name + "等待WB信息");
                }
            }
        }

        public class LiSi : Friend
        {
            private string _myState;
            private string _name;
            private Weibo _wb;

            public LiSi(Weibo wb, string name)
            {
                this._name = name;
                this._wb = wb;
            }

            public override void Accept()
            {
                _myState = _wb.State;
                if (_myState.Equals("发送"))
                {
                    MessageBox.Show(_name + "收到WB信息");
                }
                else
                {
                    MessageBox.Show(_name + "等待WB信息");
                }
            }
        }

     } 

    客户端代码:

            private void btn_Observer_Click(object sender, EventArgs e)
            {
                Weibo wb = new Weibo();
                wb.Add(new ZhangSan(wb, "张三"));
                wb.Add(new LiSi(wb, "李四"));
                
                wb.State = "未发送";
                wb.Notify();

                wb.State = "发送";
                wb.Notify();} 
  • 相关阅读:
    PHP NG (PHP 5.7) 性能比 PHP 5.6 提升近 1 倍
    PHP移动互联网开发笔记(3)——运算符
    利用PHP生成二维码
    几款常用的PHP模板引擎
    PHP多线程的使用
    关于程序员失眠的解决方案
    PHP移动互联网开发笔记(5)——文件的上传下载
    PHP生成二维码【谷歌API+qrcode+圆角Logo】
    7种流行PHP集成开发工具(IDE)的比较
    封装
  • 原文地址:https://www.cnblogs.com/kavilee/p/2376497.html
Copyright © 2011-2022 走看看