中介者模式

视频地址:https://www.bilibili.com/video/BV1ZQ4y1K72L/

1.中介者模式的定义

中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,

且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。

2.中介者模式的结构

各对象显式地持有对方引用, 用于对象之间的交互, 交互关系形成网状结构, 不利于系统维护以及开发人员的理解. 这时可以定义一个中介者对象, 封装注册各对象的引用, 以及完成对象之间的交互操作. 同事对象之间不能直接交互, 它们之间的交互, 需要委托给中介者对象完成, 即 同事对象除了完成自己本身的操作之外, 只和中介者打交道(符合最少知识原则), 如此一来, 交互关系将由复杂的网状结构变成星型结构.  方便系统维护以及开发人员的理解. 关键点在于同事对象之间不能直接交互, 交互依赖于中介者完成, 中介者注册管理各同事对象的引用, 以及负责转发消息, 实现他们之间的交互。

解析:

中介者模式包含以下主要角色。

抽象中介者(Mediator)角色:它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。

具体中介者(ConcreteMediator)角色:实现中介者接口,定义一个 List 来管理同事对象,协调各个同事角色之间的交互关系,因此它依赖于同事角色。

抽象同事类(Colleague)角色:定义同事类的接口,保存中介者对象,提供同事对象交互的抽象方法,实现所有相互影响的同事类的公共功能。

具体同事类(Concrete Colleague)角色:是抽象同事类的实现者,当需要与其他同事对象交互时,由中介者对象负责后续的交互。

3.中介者模式实例分析

例子:假设现在科技发达之后,家里所有设备都是智能化的,而小明在家洗澡的时候有个习惯就是喜欢听歌,而且洗澡时候还要把窗帘拉上。

因此就有这种情形,小明要拉窗帘可能就是要洗澡,当然也要听歌,因此我们希望小明家的洗浴设备,音响设备和窗帘设备都能协同合作,不

管操作哪种设备,其他两种设备都有一定响应,以此写出程序。

这个程序最主要的功能就是在 一个类里完成了对另外两个类的方法作用。但是这样设计有两个主要缺陷(其实是对象之间耦合度过高而引起的)

一旦窗帘设备坏掉,需要更换,那样我们就要让新的窗帘设备建立别的设备的连接,这样会很麻烦这个程序最主要的功能就是在 一个类里完成

了对另外两个类的方法作用。但是这样设计有两个主要缺陷(其实是对象之间耦合度过高而引起的)一旦窗帘设备坏掉,需要更换,那样我们

就要让新的窗帘设备建立别的设备的连接,这样会很麻烦如果我们又有别的需求,比如洗澡的时候要把门锁住,那门锁的智能设备又要关联所

有设备,更加麻烦。

如图:

中介者模式的引入则极大的弥补了上述程序的两个缺陷,对象交互如下图:

其实中介者就好比智能家居的管家,这样所有对象的交互指令都通过它来传达,这样这个中介者负责与对象之间联系,对象与对象之间不再进行直接的交互,也就是对对象关系 进行解耦。

4.中介者模式的优缺点

优点:

  1. 通过让对象彼此解耦,增加对象的复用性
  2. 通过将控制逻辑集中,可以简化系统维护
  3. 通过中介者使一对所变成了一堆一,便于理解

缺点:

  1. 如果涉及不好,引入中介者会使程序变的复杂
  2. 中介者承担过多责任,维护不好会出大事

 

posted @ 2020-04-18 10:02  jyqdaisy  阅读(214)  评论(0编辑  收藏  举报