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("日,我一直都在诶,只不过都在潜水,嘿嘿。");
        }

 

posted @ 2012-02-23 01:46  无主之城  阅读(442)  评论(0编辑  收藏  举报