【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();
     }
 }

运行结果

相关推荐
周杰伦fans8 小时前
C# 踩坑 CS8370:Switch Expression 在 C# 7.3 不可用及三种解决方案
c#
z落落10 小时前
C# ToCharArray + foreach遍历 + String与StringBuilder
开发语言·c#
xiaoshuaishuai811 小时前
C# AvaloniaUI动态显示图片
开发语言·c#
csdn_aspnet14 小时前
EasyModbus 与 C# 集成
c#·modbus·easymodbus
JaydenAI15 小时前
[MAF预定义ChatClient中间件-06]利用ImageGeneratingChatClient开发专业图片生成Agent
ai·c#·agent·agent管道·chatclient中间件·chatclient管道
qq_2975746716 小时前
设计模式系列文章(基础篇第 11 篇):模板方法模式——定义算法骨架,实现代码复用与流程统一
算法·设计模式·模板方法模式
csdn_aspnet17 小时前
Modbus TCP C# 客户端程序
服务器·网络·tcp/ip·c#
0x000718 小时前
译 Anders Hejlsberg 谈 C# 与 .NET
开发语言·c#·.net
Xin_ye1008618 小时前
C# 零基础到精通教程 - 第十七章:前端集成——Blazor 基础
开发语言·c#