中介模式Mediator
场景
假如没有总经理,下面有三个部门,财务部,市场部,研发部。财务部要发工资,让大家和对公司需要跟市场部和研发部都通气。市场部要接个新项目,需要研发部技术支持,需要财务部处理资金。市场部跟各个部门打交道。财务部发钱了,需要跑去和研发部和市场部打交道。研发部研发产品,市场部做调研,销售缺少资金又需要去找财务部。在这种情况下,虽然只有三个部门但是非常乱。者是因为在未说明的情况下,我们把这组织长了以中国网状结构的图形组织关系。多对对。
实际上,倘若公司有了总经理(当然现实世界也的确是这样,这样就非常好)各个部门有什么事情都报告总经理,总经理再通知相关部门。
这就是一个中介者模式。中经理起到一个中介协调的关系。
核心:如果一个系统中对象之间的联系呈现为网状结构,对象之间存在大量的多对多关系,将导致关系及其复杂,这些对象成为“同事关系”
我们引入一个中介者模式,使各个同事对象只跟中介者对象打交道,将复杂的网络结构化解为如下的星型结构。
中介者模式各个结构作用:
抽象中介者,定义了同事对象到中介者对象的接口
抽象同时类:
具体中介者对象,实现抽象类的方法,它需要知道所有具体同时类,并从具体同事接受消息,向具体同事对象发出命令。
具体同事类:每个具体同事只知道自己的行为,而不了解其他同事类的情况,但它们都认识中介者模式。
中介者模式的本质:
解耦多个同事对象之间的交互关系。每个对象都持有中介者对象的引用,只跟中介者对象打交道。我们通过中介者对象统一管理这些交互关系
开发中遇到场景:
MVC模式(model, view, controller)。M和V都和他打交道
窗口游戏程序:窗口软件开发中窗口对象也是一个中介者对象。
图形界面开发GUI中,多个组件之间的交互,可以通过引入一个中介者对象来解决。可以是整体的窗口对象或者DOM对象
Java.lang.reflect.Method#invoke();