中介者模式 mediator
在业务场景中,不同的对象可能会相互影响,相互通信。
比如存在A 和 B 对象,A 的状态变化会影响B,反之亦然,那么A 和B之间就需要通信机制
简单的方法是A和B互相引用,并公开public 的调用方法。
如果在加入C,D,多个对象之间可能两两通信,耦合关系会变得非常的复杂。
中介模式,就是用来处理这样的问题,
ABCD 都和一个 mediator对象打交道,然后mediator负责与各个对象沟通。
这种模式的特点,就是要有一个非常强大的中介者,知道所有的知识,类似于房屋买卖的中介。
在实现层面上,有几个要点。
一个是对于 mediator 接口, 需要有方法创建和添加 Collegue。
并且提供一个 接口给 Collegue调用,以便告诉自己 他们的需求,相当于留一个电话号码给买家。
对于collegue接口, 需要保留一个对medidator的引用,以便有需求的时候,进行电话骚扰。
对于mediator模式,可能我们最容易遇到的场景就是 UI编程, 点击一个组件,页面上其他的组件的行为可能就需要改变,这个时候
使用mediator模式是非常合适的。
除了mediator模式,在考虑复杂的对象间通信时候,还有 观察者模式可以考虑。
另外,为了避免对象组件的复杂通信,也可以考虑 消息队列。
而在一些分布式场景中,基本都有一个中心化的节点,比如hadoop的nameNode等作为协调者。
p2p的网路通信的复杂度远远大于 有中心节点的通信网络的复杂度,虽然中心点容易成为瓶颈。
大名鼎鼎的比特币,就是去中心化,反mediator的翘楚。但对于大多数平凡程序员的日常,mediator中心化瓶颈还不至于是棘手的问题。
网友评论