mediator模式

实验室这个平台中设计模型数也数不完。。

今天遇到了mediator模型。

原理:

FacadeAndMediator2

wiki上的C#代码示例:

using System;
using System.Collections;
 
  class MainApp
  {
    static void Main()
    {
      ConcreteMediator m = new ConcreteMediator();
 
      ConcreteColleague1 c1 = new ConcreteColleague1(m);
      ConcreteColleague2 c2 = new ConcreteColleague2(m);
 
      m.Colleague1 = c1;
      m.Colleague2 = c2;
 
      c1.Send("How are you?");
      c2.Send("Fine, thanks");
 
      // Wait for user 
      Console.Read();
    }
  }
 
  // "Mediator" 
  abstract class Mediator
  {
    public abstract void Send(string message, 
      Colleague colleague);
  }
 
  // "ConcreteMediator" 
  class ConcreteMediator : Mediator
  {
    private ConcreteColleague1 colleague1;
    private ConcreteColleague2 colleague2;
 
    public ConcreteColleague1 Colleague1
    {
      set{ colleague1 = value; }
    }
 
    public ConcreteColleague2 Colleague2
    {
      set{ colleague2 = value; }
    }
 
    public override void Send(string message, 
      Colleague colleague)
    {
      if (colleague == colleague1)
      {
        colleague2.Notify(message);
      }
      else
      {
        colleague1.Notify(message);
      }
    }
  }
 
  // "Colleague" 
  abstract class Colleague
  {
    protected Mediator mediator;
 
    // Constructor 
    public Colleague(Mediator mediator)
    {
      this.mediator = mediator;
    }
  }
 
  // "ConcreteColleague1" 
  class ConcreteColleague1 : Colleague
  {
    // Constructor 
    public ConcreteColleague1(Mediator mediator) 
      : base(mediator) 
    { 
    }
 
    public void Send(string message)
    {
      mediator.Send(message, this);
    }
 
    public void Notify(string message)
    {
      Console.WriteLine("Colleague1 gets message: " 
        + message);
    }
  }
 
  // "ConcreteColleague2" 
  class ConcreteColleague2 : Colleague
  {
    // Constructor 
    public ConcreteColleague2(Mediator mediator) 
      : base(mediator) 
    { 
    }
 
    public void Send(string message)
    {
      mediator.Send(message, this);
    }
 
    public void Notify(string message)
    {
      Console.WriteLine("Colleague2 gets message: " 
        + message);
    }
  }

看上去很麻烦,但我们只要从其defination入手:

With the mediator pattern communication between objects is encapsulated with a mediator object. Objects no longer communicate directly with each other, but instead communicate through the mediator. This reduces the dependencies between communicating objects, thereby lowering the coupling.

还看到有人画了下面这样一张图,就更清楚了:

0585d86e710df3d580cb4a4d

缺点:mediator会越来越大。。so big..

原文地址:https://www.cnblogs.com/justin_s/p/1903676.html