设计模式(九)中介者模式

本来这一章是想一起写完中介者模式 观察者模式 备忘录模式的,但是觉得中介者在实际中比较有意义,所以单独一章吧。

中介者模式

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

在这里插入图片描述
实例:
在这里插入图片描述
中介者有两个接口:注册会员,为会员配对。具体终结者实现这两个接口。其中男女双方是各自独立的,不需要直接交互。

解耦原理解析

当然,这里还看不出来实际的效果。再看一个例子:采购,库存,销售:
在这里插入图片描述
相互依赖,或许还可以。但是一个系统不可能这么简单。当模组增加以后:
在这里插入图片描述
天呐,这代码怎么写?写出来怎么维护?简直是要了老命了。
好在,我们有终结者,不,是中介者模式:
在这里插入图片描述
可以看到,每个模块只做好自己的事就好了,自己提供接口和实现,不需要关心别的模组。这一切,让中介者去关心吧。我只需要提供接口给它,或者使用它提供的接口就好了。

应用实例

很多年前,我开发的多媒体播放器有这么一件事:
新加入的模组启动,需要通知之前的模组停下来。屏幕就一个,手机在拍照的时候,电影播放需要停下来吧?
在这里插入图片描述
三个模组还好,如果更多会怎样?我在自己的模组里面需要同时给十几个模组发消息。关键是,每新加一个模组,就需要修改所有的模组代码。工作量大是一回事,一处出错就全错了,疯了!
在这里插入图片描述

很简单的做法,就是加入一个资源管理员做中介:
在这里插入图片描述

于是,每个模组只需要写好和管理员的两个接口就好,以后有模组增加和删减,旧模组都不用关心:
1.Media(发送启动消息)----管理员(发送停止给当前的模组BT)—BT(停止播放)
2.FM (发送启动消息)----管理员(发送停止给当前的模组Media)—Media(停止播放)
这样,每个模组只需发送启动和停止消息,并接受管理的启动和停止命令就好了。我根本不需要知道我启动时系统需要做什么,也不知道我停止是因为啥原因。

代码实战

接下来,我们看看采购-库存-销售的实例,扩展一下普通的中介者实现。

在这里插入图片描述
采购-库存-销售,都继承抽象同事对象,他们相互之间不需要关联和依赖,而是由中介者统一调度。
中介者继承抽象中介,统一调度各个具体同事。

AbstractMediator的作用是实现中介者的抽象定义,定义了一个抽象方法execute。这个抽象方法叫做事件方法,处理多个对象之间的关系。

我们可以根据业务需要,定义多个中介者,划分他们的具体职责。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值