Fork me on GitHub

大战设计模式【21】—— 中介者模式

中介者模式(Mediator)

 

设计模式使用的例子https://github.com/LinkinStars/DesignPatternsAllExample

 

一、定义

用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以相对独立地改变它们之间的交互。 

 

二、结构

Mediator(抽象中介者):它定义了一个接口,该接口用于与各同事对象之间进行通信。

ConcreteMediator(具体中介者):它实现了接口,通过协调各个同事对象来实现协作行为,维持了各个同事对象的引用。

Colleague(抽象同事类):它定义了各个同事类公有的方法,并声明了一些抽象方法来供子类实现,同时维持了一个对抽象中介者类的引用,其子类可以通过该引用来与中介者通信。

ConcreteColleague(具体同事类):抽象同事类的子类,每一个同事对象需要和其他对象通信时,都需要先与中介者对象通信,通过中介者来间接完成与其他同事类的通信。

 

三、优点

简化了对象之间的交互,它用中介者和同事的一对多交互替代了原来同事之间的多对多交互。

将各同事对象解耦,可以独立地改变和复用每个同事和中介者,增加新的中介和同事很方便,符合开闭原则。

可以减少大量同事子类的生成,改变同事行为只需要生成新的中介者子类即可。

 

四、缺点

具体中介者子类中包含了大量的同事之间的交互细节,可能会导致具体中介者类非常复杂,使得系统难以维护。

 

五、应用场景

系统中对象之间存在复杂的引用关系,系统结构混乱且难以理解

一个对象由于引用了其他很多对象并且直接和这些对象通信,难以复用该对象

想要通过一个中间类来封装多个类的行为又不想生成太多子类,引入中介者即可实现

 

六、个人总结

1、中介者模式和名字描述的一样,就是找了一个中介然后通过这个中介来管理一些互相关联状态的类

2、中介者模式主要就是让原来复杂的状态关联解除

3、在交互较少或者说管理类不多的情况下不需要使用

 

 

 

参考博客:http://www.cnblogs.com/edisonchou/p/7247990.html
posted @   LinkinStar  阅读(259)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
历史上的今天:
2016-11-08 线程中sleep方法和wait方法有什么区别?
点击右上角即可分享
微信分享提示