网站开发的微端,wordpress布谷鸟主题,开源网站模板,郑州市住房和城乡建设厅网站文章目录 1.概述2.中介者模式的适用场景2.1.用户界面事件2.2.分布式架构多模块通信 3.总结 1.概述
中介者模式#xff08;Mediator Pattern#xff09;是一种行为型设计模式#xff0c;它用于解决对象间复杂、过度耦合的问题。当多个对象#xff08;一般是两个以上的对象Mediator Pattern是一种行为型设计模式它用于解决对象间复杂、过度耦合的问题。当多个对象一般是两个以上的对象之间存在复杂的相互关联和直接通信时中介者模式通过引入一个新的中介对象来封装和集中处理这些对象间的交互逻辑从而降低对象之间直接耦合。 说的再具体一点就是原本相互依赖的对象通常称为同事类或者参与者不直接相互引用而是通过中介者对象进行交互。每个对象都将请求委托给中介者由中介者决定如何分发这些请求以及如何协调各个对象的行为。这样各个对象只知道与中介者打交道而不必了解彼此的存在和具体的交互方式这有助于简化对象间的交互关系使得系统更易于维护和扩展。
用网络拓扑图来做一个对比假设现在有5台计算机都是互相独立交互的拓扑成了网状结构 现在中间加入一台交换机所有的计算机都通过交换机这个中介者进行交互拓扑图就由网状变成了星型这样就减少了很多杂乱的依赖和耦合 简而言之中介者模式的主要作用就是
解耦对象间的直接联系。将对象间的交互逻辑集中到一个中介者对象中。提供一个统一的接口用于相关对象之间的通信。
2.中介者模式的适用场景
上面提到了中介者模式适用于多种需要解耦对象之间复杂交互关系的业务场景下面例举几个
2.1.用户界面事件
在很多资料中都以用户界面的事件来介绍中介者模式在WEB前端例如VUE中也有相同的实现例如在表单的开发中单选框、文本框、下拉框等组件之间的交互频繁而复杂第一行的单选框可能会影响第二行第三行的显示点击第二行又可能影响第四行第五行的显示等等。 这时候如果每个操作都单独写一个事件会使得函数的数量膨胀变得非常复杂这时候就可以考虑使用中介者模式。感兴趣的同学可以去看看我之前的博客《Vue3开发基础响应式变量、双向绑定、计算属性、监听器》 中的 4.3.对象监听select联动这里就不做赘述了。
2.2.分布式架构多模块通信
在分布式架构中一块大的业务会被分解到不同的微服务中多个服务协作完成一个个的业务流程这就涉及到不同的服务之间是需要建立通信关系的如果放任不同的服务自行建立通信很可能会导致服务间的关系变得杂乱不利于后续的微服务治理工作。 所以一般在分布式的架构中会通过中介者服务将模块间的直接调用关系转为模块与中介者的间接交互简化通信逻辑方便整体协调和控制。主要体现在以下一些方面
注册中心 每一个服务都将自己的服务信息注册到注册中心需要获取依赖服务的信息时也从注册中心获取这里的注册中心起到的是中介者的作用。API网关 外部客户端的所有请求首先经过一个中央入口点即中介者这个入口提供了一个统一的接口集合就像中介者提供一个统一的接口让同事类在这里是微服务通过它进行交互。客户端只需面对一个接口而内部复杂的微服务结构则得到了良好的隔离。 还可能包含鉴权、限流、熔断、缓存、日志记录、监控、协议转换等各种横切关注点的处理。这些原本分散在各个微服务中的逻辑被集中到API Gateway中减少了微服务间的直接耦合。事件驱动架构 中介者可以作为事件总线或消息代理如RabbitMQ、Kafka等各个微服务通过发布和订阅消息的方式来通信而不是直接调用其他服务的API。这种情况下消息中间件的服务端中介者负责消息的传递、存储和路由。 这里提一下事件驱动中的消息队列这部分看起来更应该归纳到观察者模式或者叫发布订阅模式中不熟悉观察者模式的可以看看《循序渐进的理解观察者模式》那么中介者模式和观察者模式在这里有什么区别和联系呢 消息中间件中的发布-订阅模式 发布者生产者将消息发布到某个主题或队列而订阅者消费者则监听感兴趣的主题或队列当有消息发布时订阅者会接收到通知并处理消息。 中介者模式 当我们提到消息中间件作为中介者模式的应用时重点在于其在整个系统架构层面的作用即它作为一个中介角色负责协调不同微服务间的交互减少微服务间的直接耦合。通过消息中间件微服务不再需要知道其他微服务的具体位置和实现细节而是通过统一**消息中间件的服务端中介**进行通信。
在实际应用中消息中间件既可以视为观察者模式的技术手段也可以看作是中介者模式的一部分因为它统一管理了服务间的通信逻辑并通过异步的方式解耦了服务之间的直接联系在微服务架构中这两种模式并不是非此即彼而是相辅相成共同服务于系统的设计和优化。
3.总结
中介者模式在实际的应用中在解耦服务、简化通信逻辑、易于扩展和维护方面能够起到积极的作用但也需要明确的是中介者的引入会带来额外的复杂性例如系统架构的复杂性代码的复杂性等同时中介者一旦出现故障可能导致整个系统部分功能失效因此需要对中介者实施高可用和容错策略。 所以在实际使用的过程中对象之间的依赖是不可避免的只有在多个对象两个以上的对象之间存在复杂的相互关联和直接通信时才酌情考虑使用中介者而不是只要出现依赖就使用中介者来处理这样只会有害而无益。