• C# 中介者模式(Mediator)


    理解:通过一个中介类,把所有对象都关联中介类,对象间要相互联系时,实际上是通过中介联系,这样对象间仍然是低耦合。

    代码:

    using System.Windows.Forms;

    namespace DesignMode.Mediator
    {
        //抽象中介类
        public abstract class ContactWay
        {
           public abstract void SendMsg(string msg,Person person);
        }

        //抽象对象类
        public abstract class Person
        {
            protected ContactWay _way;
            public Person(ContactWay way)
            {
                this._way = way;
            }
        }

        //具体对象1
        public class Zhang3 : Person
        {
            public Zhang3(ContactWay way)
                : base(way)
            { }

            //重点。发送时实际是通过中介者发送
            public void SendMsg(string msg)
            {
                _way.SendMsg(msg, this);
            }

            public void GetMsg(string msg)
            {
                MessageBox.Show("张三得到信息:" + msg);
            }
        }

        //具体对象2
        public class Li4 : Person
        {
            public Li4(ContactWay way)
                : base(way)
            { }

            //重点。发送时实际是通过中介者发送
            public void SendMsg(string msg)
            {
                _way.SendMsg(msg, this);
            }

            public void GetMsg(string msg)
            {
                MessageBox.Show("李四得到信息:" + msg);
            }
        }

        //具体对象3
        public class Wang5 : Person
        {
            public Wang5(ContactWay way)
                : base(way)
            { }

            //重点。发送时实际是通过中介者发送
            public void SendMsg(string msg)
            {
                _way.SendMsg(msg, this);
            }

            public void GetMsg(string msg)
            {
                MessageBox.Show("王五得到信息:" + msg);
            }
        }

        //具体中介类
        public class Facebook : ContactWay
        {
            //中介类需要知道所有的联系对象
            private Zhang3 _zhang3;
            public Zhang3 zhang3
            {
                get { return _zhang3; }
                set { _zhang3 = value; }
            }

            private Li4 _li4;
            public Li4 li4
            {
                get { return _li4; }
                set { _li4 = value; }
            }

            private Wang5 _wang5;
            public Wang5 wang5
            {
                get { return _wang5; }
                set { _wang5 = value; }
            }

            public override void SendMsg(string msg, Person person)
            {
                //把消息转发给其它人
                if (person == zhang3)
                {
                    li4.GetMsg(msg);
                    wang5.GetMsg(msg);
                }
                else if (person == li4)
                {
                    zhang3.GetMsg(msg);
                    wang5.GetMsg(msg);
                }
                else if (person == wang5)
                {
                    zhang3.GetMsg(msg);
                    li4.GetMsg(msg);
                }
            }
        }
    }

    客户端代码:

            private void btn_Mediator_Click(object sender, EventArgs e)
            {
                Facebook facebook = new Facebook();

                //让联系人认识中介类
                Zhang3 z3 = new Zhang3(facebook);
                Li4 l4 = new Li4(facebook);
                Wang5 w5 = new Wang5(facebook);

                //让中介类认识每个联系人
                facebook.zhang3 = z3;
                facebook.li4 = l4;
                facebook.wang5 = w5;

                z3.SendMsg("哥子些,都出来山,闷起咋子");
                l4.SendMsg("三哥,最近在哪混哦,看斗五娃儿没?");
                w5.SendMsg("日,我一直都在诶,只不过都在潜水,嘿嘿。");
            }
  • 相关阅读:
    LeetCode 282. Expression Add Operators (Hard,递归分治)
    LeetCode 279. Perfect Squares
    LeetCode 278. First Bad Version
    LeetCode 275. H-Index II
    工作笔记——使用Jest时遇到的一些问题
    RFC2616-HTTP1.1-Header Field Definitions(头字段规定部分—译文)
    RFC2616-HTTP1.1-Status Code(状态码规定部分—译文)
    RFC2616-HTTP1.1-Methods(方法规定部分—译文)
    RFC2616-HTTP1.1-Status Code(状态码规定部分—单词注释版)
    RFC2616-HTTP1.1-Methods(方法规定部分—单词注释版)
  • 原文地址:https://www.cnblogs.com/kavilee/p/2364139.html
Copyright © 2020-2023  润新知