


这要从Mediator模式要解决的问题说起。Mediator模式是为了解决对象间多对多的通信协议问题。碰巧的是,我在《基于组件开发》一书中也读到了相关的内容。
如果A组中的M个对象与B组中的N个对象相互之间都需要通信,那么在未使用Mediator之前,它们之间需要M*N个通信协议。这在对象很多的情况下很麻烦,在添加一个对象时要做的工作也很多。
“所有问题,都可以通过添加一个间接的中间层来解决”。所以我们引入Mediator作为中间层,它的工作就是进行协议翻译。设计一个中间表示模式,实现所有对象通信协议到中间表示模式的翻译。这样,原来的M*N个通信协议就变成了M+N个通信协议。在添加一个新的通信对象时,也只要增加一种互译协议。
回到朋友的问题。根据这样的设计,Mediator必须知道如何完成这种协议翻译。因此,它必须了解具体参与通信对象的协议实现方式。所以,Mediator的实现就依赖于通信对象的实现了。
CORBA就是这样的一个例子。当然,我们可以把协议翻译这一块拿出来,做成一个协议适配器,通过再添加一个中间层,消除Mediator的具体实现与通信对象的具体实现之间的耦合,这是故事的续集。
我们还可以让通信对象各自负责实现协议翻译。毕竟,架构就是系统由哪些组件构成以及这些组件之间的关系。猜猜我们得到了什么?MQ(消息队列)/MOM(基于消息的中间件)/ESB(企业服务总线)!
没有评论:
发表评论