【C#设计模式(18)——中介者模式(Mediator Pattern)】

前言

中介者模式:是两者之间通过第三者来帮助传话。

代码

csharp 复制代码
 //抽象接收者
 public abstract class Receiver
 {
     protected Mediator mediator;
     protected Receiver(Mediator mediator)
     {
         this.mediator = mediator;
     }
     public abstract void SendMessage(string message);
     public abstract void ReceiveMessage(string message);
 }
 //具体接收者A
 public class ReceiverA : Receiver
 {
     public ReceiverA(Mediator mediator) : base(mediator){}

     public override void ReceiveMessage(string message)
     {
         Console.WriteLine($"{this.GetType().Name} got a message[{message}]");
     }
     public override void SendMessage(string message)
     {
         Console.WriteLine($"{this.GetType().Name}:a message was send...");
         mediator.SendMessage(this,message);
     }
 }
 //具体接收者B
 public class ReceiverB : Receiver
 {
     public ReceiverB(Mediator mediator) : base(mediator) { }

     public override void ReceiveMessage(string message)
     {
         Console.WriteLine($"{this.GetType().Name} got a message[{message}]");
     }

     public override void SendMessage(string message)
     {
         Console.WriteLine($"{this.GetType().Name}:a message was send...");
         mediator.SendMessage(this, message);
     }
 }
 //中介接口
 public interface Mediator
 {
     void SendMessage(Receiver obj, string message);
 }
 //具体中介者类
 public class ReceiveMediator : Mediator
 {
     private Receiver receiverA;
     private Receiver receiverB;

     public void SetReceiveA(Receiver receiverA)
     {
         this.receiverA = receiverA;
     }
     public void SetReceiveB(Receiver receiverB)
     {
         this.receiverB = receiverB;
     }
     public void SendMessage(Receiver receiver, string message)
     {
         if(receiver == receiverA)
         {
             receiverB.ReceiveMessage(message);
         }else if(receiver == receiverB)
         {
             receiverA.ReceiveMessage(message);
         }
     }
 }


 /*
  * 行为型模式:Behavioral Pattern
  * 中介者模式:Mediator Pattern
  */
 internal class Program
 {
     static void Main(string[] args)
     {
         ReceiveMediator receiveMediator = new ReceiveMediator();

         ReceiverA receiverA = new ReceiverA(receiveMediator);
         ReceiverB receiverB = new ReceiverB(receiveMediator);

         receiveMediator.SetReceiveA(receiverA);
         receiveMediator.SetReceiveB(receiverB);
         receiveMediator.SendMessage(receiverA, "Hello receiverB");

         receiveMediator.SendMessage(receiverB, "Hello receiverA");
         Console.ReadLine();
     }
 }

运行结果

相关推荐
夏子曦6 小时前
C#内存管理深度解析:从栈堆原理到高性能编程实践
开发语言·c#
阿维的博客日记8 小时前
设计模式-代理模式
设计模式·代理模式
笨手笨脚の8 小时前
设计模式-迭代器模式
java·设计模式·迭代器模式·行为型设计模式
William_cl10 小时前
C# MVC网页调试的方法
开发语言·c#·mvc
小小的技术员11 小时前
C# 无实体生成JSON字符串
c#·json
o0向阳而生0o11 小时前
109、23种设计模式之迭代器模式(18/23)
设计模式·迭代器模式
笨手笨脚の16 小时前
设计模式-命令模式
设计模式·命令模式·行为型设计模式
adair-zhang16 小时前
23种设计模式
设计模式
十五年专注C++开发16 小时前
QT 中的元对象系统(六):connect函数详解
开发语言·c++·qt·设计模式·系统架构·qevent
L X..17 小时前
Unity反射调用 ReactiveProperty<T>(泛型类型)内部方法时崩溃
unity·c#·游戏引擎·.net