设计模式之—中介者模式<Mediator Pattern>

中介者抽象类(Mediator)定义了同事对象到中介者对象的接口

namespace MediatorPattern.CLASS
{
    abstract class Mediator
    {
        public abstract void Send(string message, Colleague colleague);
    }
}
View Code

抽象同时类(Colleague)

namespace MediatorPattern.CLASS
{
    abstract class Colleague
    {
        protected Mediator mediator;
        public Colleague(Mediator mediator)
        {
            this.mediator = mediator;  //获取中介者对象
        }
    }
}
View Code

具体同事类1(ConCreateColleague1)只知道自己的行为而不知道其他同事,但认识中介者

namespace MediatorPattern.CLASS
{
    class ConCreateColleague1:Colleague
    {
        public ConCreateColleague1(Mediator mediator)
            : base(mediator)
        { }

        public void Send(string message)
        {
            mediator.Send(message, this);
        }

        public void Notify(string message)
        {
            Console.WriteLine("同事1得到消息:" + message);
        }
    }
}
View Code

具体同事类2(ConCreateColleague2)只知道自己的行为而不知道其他同事,但认识中介者

namespace MediatorPattern.CLASS
{
    class ConCreateColleague2:Colleague
    {
        public ConCreateColleague2(Mediator mediator)
            : base(mediator)
        { }

        public void Send(string message)
        {
            mediator.Send(message, this);
        }

        public void Notify(string message)
        {
            Console.WriteLine("同事2得到消息:" + message);
        }
    }
}
View Code

具体中介者类(ConCreateMediator)认识两个同事,给他们传递信息

namespace MediatorPattern.CLASS
{
    class ConCreateMediator:Mediator
    {
        private ConCreateColleague1 colleague1;
        private ConCreateColleague2 colleague2;
        /// <summary>
        /// 同事对象1
        /// </summary>
        public ConCreateColleague1 Colleague1
        {
            set { colleague1 = value; }
        }
        /// <summary>
        /// 同事对象2
        /// </summary>
        public ConCreateColleague2 Colleague2
        {
            set { colleague2 = value; }
        }

        public override void Send(string message, Colleague colleague)
        {
            if (colleague == colleague1)
            {
                colleague2.Notify(message);
            }
            else
            {
                colleague1.Notify(message);
            }
        }
    }
}
View Code

测试类(TestMain)同事1发的 Are you sure! ,同事2发的 Yes

using MediatorPattern.CLASS;
namespace MediatorPattern
{
    class TestMain
    {
        static void Main(string[] args)
        {
            ConCreateMediator mediator = new ConCreateMediator();
            ConCreateColleague1 colleague1 = new ConCreateColleague1(mediator);
            ConCreateColleague2 colleague2 = new ConCreateColleague2(mediator);

            mediator.Colleague1 = colleague1;
            mediator.Colleague2 = colleague2;

            colleague1.Send("Are you sure !");
            colleague2.Send("Yes!");
        }
    }
}
View Code

要么忍,要么狠,要么滚!
原文地址:https://www.cnblogs.com/zxd543/p/3277769.html