中介者模式(24)
今天我们来讲一下中介者模式。
什么叫中介者模式呢?中介者模式,用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示的相互引用,从而使其耦合松散,而且可以独立的改变他们之间的交互。
我们拿两个不认识的同事通过第三人打招呼这个情景,来看一下中介者模式是什么样的:
1 //抽象中介者类 2 abstract class Mediator 3 { 4 //定义一个抽象的发送消息方法,得到同时对象和发送消息 5 public abstract void Send(string message, Colleague colleague); 6 } 7 abstract class Colleague 8 { 9 protected Mediator mediator; 10 //构造方法,得到中介者对象 11 public Colleague(Mediator mediator) 12 { 13 this.mediator = mediator; 14 } 15 } 16 //具体的中介者类 17 class ConcreteMediator:Mediator 18 { 19 //需要了解所有的具体同事类对象 20 private ConcreateColleague1 colleague1; 21 private ConcreateColleague2 colleague2; 22 23 internal ConcreateColleague1 Colleague1 24 { 25 set 26 { 27 colleague1 = value; 28 } 29 } 30 31 internal ConcreateColleague2 Colleague2 32 { 33 set 34 { 35 colleague2 = value; 36 } 37 } 38 //重写发送信息的方法,根据对象做出选择判断,通知对象 39 public override void Send(string message, Colleague colleague) 40 { 41 if (colleague == colleague1) 42 { 43 colleague2.Notify(message); 44 } 45 else 46 { 47 colleague1.Notify(message); 48 } 49 } 50 } 51 //具体的同事类1 52 class ConcreateColleague1:Colleague 53 { 54 public ConcreateColleague1(Mediator mediator) : base(mediator) 55 { 56 } 57 //发送消息时通常使中介者发送出去的。 58 public void Send(string message) 59 { 60 mediator.Send(message, this); 61 } 62 63 public void Notify(string message) 64 { 65 Console.WriteLine($"同事1得到消息{message}"); 66 } 67 } 68 class ConcreateColleague2:Colleague 69 { 70 public ConcreateColleague2(Mediator mediator) : base(mediator) 71 { 72 } 73 74 public void Send(string message) 75 { 76 mediator.Send(message, this); 77 } 78 79 public void Notify(string message) 80 { 81 Console.WriteLine($"同事2得到消息{message}"); 82 } 83 }
客户端调用
1 public static void Main() 2 { 3 ConcreteMediator m = new ConcreteMediator(); 4 //让两个具体同事类认识中介者对象 5 ConcreateColleague1 c1 = new ConcreateColleague1(m); 6 ConcreateColleague2 c2 = new ConcreateColleague2(m); 7 //让中介者认识各个具体同事类对象 8 m.Colleague1 = c1; 9 m.Colleague2 = c2; 10 //具体同事类对象的发送信息都使通过中介者转发 11 c1.Send("吃饭了吗?"); 12 c2.Send("还没有呢,你打算请客吗?"); 13 Console.ReadKey(); 14 }
中介者模式很容易再系统中应用,也很容易再系统中误用。当系统出现‘多对多’交互复杂的对象群时,不要急于使用中介者模式,而要先反思你的系统在设计商是不是合理。
由于把对象如何协同进行了抽象,将中介作为一个独立的概念并将其封装在一个对象中,这样关注的对象就从对象各自本身的行为转移到他们之间的交互上来,也就是站在一个更宏观的角度去看待系统。
中介者模式一般应用于一组对象以定义良好但是复杂的方式进行通信的场合,以及想定制一个分布在多个类中的行为,而又不想生成太多的子类的场合。
好,中介者模式今天我们就讲到这里,下一篇我们讲 享元模式
本系列将持续更新,喜欢的小伙伴可以点一下关注和推荐,谢谢大家的支持
努力,不是为了要感动谁,也不是要做给哪个人看,而是要让自己随时有能力跳出自己厌恶的圈子,并拥有选择的权利。记住,用自己喜欢的方式过一生。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?