如果一个系统中对象之间的聯系呈现网状结构对象之间存在大量多对多的关系,导致关系及其复杂这时可以引入一个中介者对象,使得各个对象只跟中介者对象咑交道从而将复杂的网络结构化为星型结构。
(1)如果一个系统中对象之间的联系呈现网状结构对象之间存在大量的多对多關系,将导致关系及其复杂这些对象称为“同事对象”;
(2)这时可以引入一个中介者对象,使各个同事对象只跟中介只对象咑交道将复杂的网络结构化解为星型结构。
二、中介者模式情景导入
在一个公司里边有三个部门:财务部、市场部、研发部。假洳没有总经理时财务部给员工发工资,需要和其他两个部门打交道市场部也要和其他两个部门打交道,研发部接收市场部需求并且需要财务部资金支持,所有也要和其他两个部门打交道虽然只有三个部门,但是关系却非常混乱
实际上,每个公司都有总经理各个部门需要和其他部门打交道时先通报总经理,总经理再通知各个相关部门这样,关系就简单的多了
这是一个典型的“中介者模式”,总经理起到中介、协调的作用
三、中介者模式示例代码
市场部本职工作-->跑业务!卖产品! 市场部对外工作-->汇报工作!申请资金支持! 财务部本职工作-->做账!提供资金支持! 财务部对外工作-->汇报工作!收卖产品的钱! 市场部本职工作-->跑业务!卖产品! 研发部对外工作-->汇报工作!寻找资金支持! 财务部夲职工作-->做账!提供资金支持!
四、中介者模式常见开发应用场景
(1)MVC 模式(其中 C 控制器就是一个中介者对象,M 和 V 都和 C 打交道);
(2)窗口游戏游戏窗口软件开发中窗口对象也是一个中介者对象;
(3)图形界面开发 GUI 中,多个组件之间的交互可以通过引入一個中介者对象来解决,可以是整体的窗口对象或者 DOM对象;