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

运行结果

相关推荐
苏渡苇9 分钟前
优雅应对异常,从“try-catch堆砌”到“设计驱动”
java·后端·设计模式·学习方法·责任链模式
kylezhao201912 分钟前
C#序列化与反序列化详细讲解与应用
c#
JQLvopkk16 分钟前
C# 实践AI :Visual Studio + VSCode 组合方案
人工智能·c#·visual studio
故事不长丨20 分钟前
C#线程同步:lock、Monitor、Mutex原理+用法+实战全解析
开发语言·算法·c#
kingwebo'sZone25 分钟前
C#使用Aspose.Words把 word转成图片
前端·c#·word
短剑重铸之日1 小时前
《设计模式》第十一篇:总结
java·后端·设计模式·总结
大空大地20261 小时前
表达式与运算符
c#
feasibility.2 小时前
AI 编程助手进阶指南:从 Claude Code 到 OpenCode 的工程化经验总结
人工智能·经验分享·设计模式·自动化·agi·skills·opencode
向上的车轮2 小时前
为什么.NET(C#)转 Java 开发时常常在“吐槽”Java:checked exception
java·c#·.net
BD_Marathon2 小时前
七大设计原则介绍
设计模式