zoukankan      html  css  js  c++  java
  • 观察者-中介者设计模式(委托、事件实现)

    子窗体1:

        //声明一委托
        public delegate void SendMessageDel(string str);
        public partial class childform1 : Form
        {
            public childform1()
            {
                InitializeComponent();
            }
    
            #region 用委托实现观察者模式
            //定义一委托的实例
            //不安全,可以被外部调用
            public SendMessageDel sendMessageDelInstance { get; set; }
    
            //委托的方法
            private void button1_Click(object sender, EventArgs e)
            {
                sendMessageDelInstance("委托实现观察者模式");
    
            }
            #endregion
    
            #region 用事件实现观察者模式
            //定义事件
            public event SendMessageDel sendMessageEvent;
            private void button2_Click(object sender, EventArgs e)
            {
                sendMessageEvent("事件实现观察者模式");
            }
    
            #endregion 
    
    
        }

    主窗体

    public partial class mainform : Form
        {
            public mainform()
            {
                InitializeComponent();
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
    
                #region 委托实现观察者
                childform1 c1 = new childform1();
                c1.Show();
                //窗体2/3注册到委托
                childform2 c2 = new childform2();
                c1.sendMessageDelInstance += c2.SetMessage;
                c2.Show();
                childform3 c3 = new childform3();
                c1.sendMessageDelInstance += c3.SetMessage;
                c3.Show();
                #endregion
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
    
                #region 事件实现观察者模式
                childform1 c1 = new childform1();
                c1.Show();
                //窗体2/3注册到事件
                childform2 c2 = new childform2();
                c1.sendMessageEvent += c2.SetMessage;
                c2.Show();
                childform3 c3 = new childform3();
                c1.sendMessageEvent += c3.SetMessage;
                c3.Show();
                #endregion
            }
        }

    子窗体2/3

     public partial class childform2 : Form
        {
            public childform2()
            {
                InitializeComponent();
            }
            //委托的方法
            public void SetMessage(string str)
            {
                this.textBox1.Text = str+" "+DateTime.Now.ToString();
            }
    
              //事件的方法
            public void SetMessage_event(string str)
            {
                this.textBox1.Text = str+" "+DateTime.Now.ToString();
            }
        } 

     区别:事件是安全的,只能在类的内部触发。

  • 相关阅读:
    [BZOJ3671][UOJ#6][NOI2014]随机数生成器
    [BZOJ3670][UOJ#5][NOI2014]动物园
    [UOJ#131][BZOJ4199][NOI2015]品酒大会
    [BZOJ4530][Bjoi2014]大融合 LCT + 启发式合并
    有趣的题目名称,有趣的题目
    [BZOJ2959]长跑——新技能:LCT+缩圈
    贴一下WC总结里提到的那道裸题吧。。。
    System and method for assigning a message
    http请求
    jQuery 语法
  • 原文地址:https://www.cnblogs.com/janghe/p/7711774.html
Copyright © 2011-2022 走看看