美文网首页
设计模式 - 中介者模式

设计模式 - 中介者模式

作者: Mitchell | 来源:发表于2016-09-04 15:50 被阅读68次
    • 简介
      用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
    • 中介模式的缺点
      • 中介者模式很容易在系统中应用,也很容易在系统中误用。当系统出现了‘多对多’交互复杂的对象群,不能急于使用中介者模式。
    • 中介者模式的优点
      • 具体中介者类控制了集中化,于是就把交互复杂性变味了中介者的复杂性,这就使得中介者会变得比任何一个中介类都复杂。
    • 实例:
    //中介基类
    abstract class Mediator
    {
        public abstract void Send(string message,Colleague colleague);
    }
    //同事类
    abstract class Colleague
    {
        protected Mediator mediator;
        public Colleague(Mediator mediator){
            this.mediator = mediator;
        }
    }
    class ConcreteMediator : Mediator
    {
        private ConcreteColleague1 cooleague1;
        private ConcreteColleague2 cooleague2;
    
        public ConcreteColleague1 Colleague1
        {
            set{ Colleague1 = value; }
        }
        public ConcreteColleague2 Colleague2
        {
            set{ Colleague2 = value; }
        }
        public override void Send(stirng message,Colleague colleague){
            if(colleague == Colleague1)
            {
                Colleague1.Notify(message);
            }else{
                Colleague2.Notify(message);
            }
        }
    }
    class ConcreteColleague1 :Colleague
    {
        public ConcreteColleague1 (Mediator mediator):base(mediator)
        [
    
        ]
        public void Send(string message)
        {
            mediator.Send(message,this);
        }
        public void Notify(string message)
        {
            Console.WriteLine("同事1得到的消息是:"+message);
        }
    }
    class ConcreteColleague2 :Colleague
    {
        public ConcreteColleague2 (Mediator mediator):base(mediator)
        [
    
        ]
        public void Send(string message)
        {
            mediator.Send(message,this);
        }
        public void Notify(string message)
        {
            Console.WriteLine("同事2得到的消息是:"+message);
        }
    }
    static void Main(string[] args){
        //创建中介类
        ConcreteMediator M = new ConcreteMediator();
        //
        ConcreteColleague1 c1 = new ConcreteColleague1(m);
        ConcreteColleague2 c1 = new ConcreteColleague2(m);
        m.Colleague1 = c1;
        m.Colleague2 = c2;
        c1.Send("message1");
        c2.Send("message2");
        Console.Read();
    }
    

    相关文章

      网友评论

          本文标题:设计模式 - 中介者模式

          本文链接:https://www.haomeiwen.com/subject/domlettx.html