zoukankan      html  css  js  c++  java
  • 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..

  • 相关阅读:
    对获取的DataTable表进行过滤筛选得到DataView
    简单提取iOS13的ipsw固件的内置壁纸(或文件)
    win10设置Python程序定时运行(设置计划任务)
    后端返回一个这种类型的时间格式给前端2020-01-16T09:10:02.349Z
    js把每个词的首字母转大写
    idea连接mysql自动生成实体类
    el自定义函数
    js日期时间格式化
    js大小写转换
    js瞄点
  • 原文地址:https://www.cnblogs.com/justin_s/p/1903676.html
Copyright © 2011-2022 走看看