• 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..

  • 相关阅读:
    【反演复习计划】【bzoj2154】Crash的数字表格
    【反演复习计划】【bzoj3529】数表
    【反演复习计划】【bzoj3994】DZY loves maths
    【反演复习计划】【bzoj3994】约数个数和
    【反演复习计划】【bzoj2818】gcd
    【反演复习计划】【bzoj1011】zap-queries
    BZOJ3991: [SDOI2015]寻宝游戏
    BestCoder Round #75
    BZOJ4417: [Shoi2013]超级跳马
    BZOJ4416: [Shoi2013]阶乘字符串
  • 原文地址:https://www.cnblogs.com/justin_s/p/1903676.html
Copyright © 2020-2023  润新知