Day43【概念解析】中介者模式
目录 ▼
整理定义
中文名称:中介者模式
英文名称:mediator pattern
复述展开
What is mediator pattern?
💡 中介者模式是一种行为设计模式。它使用一个中介者对象,来封装一组对象的交互,从而将原本交互关系复杂的对象转换成一组松散耦合的中间对象。该模式有利于系统的维护和修改。
🌰*1
空中交通控制塔:飞行器驾驶员们在靠近或离开空中管制区域时不会直接相互交流。 但他们会与飞机跑道附近, 塔台中的空管员通话。 如果没有空管员, 驾驶员就需要留意机场附近的所有飞机, 并与数十位飞行员组成的委员会讨论降落顺序。 那恐怕会让飞机坠毁的统计数据一飞冲天吧。
🌰*2
聊天室:在一个聊天室中,用户发送的消息是通过服务器(中介者)转发的,而不是直接发送给其他用户。这样,用户就不需要知道其他用户的详细信息,只需要将消息发送给服务器,服务器会负责将消息转发给其他用户。
🌰*3
图形用户界面(GUI):在许多图形用户界面中,各种组件(如按钮、文本框等)之间的交互通常是通过一个中介者对象(如窗口或对话框)来协调的。例如,当一个按钮被点击时,它不会直接改变一个文本框的内容,而是通知中介者对象,然后由中介者对象来改变文本框的内容。
中介者模式结构

-
组件 (Component) 是各种包含业务逻辑的类。 每个组件都有一个指向中介者的引用, 该引用被声明为中介者接口类型。 组件不知道中介者实际所属的类, 因此你可通过将其连接到不同的中介者以使其能在其他程序中复用。
-
中介者 (Mediator) 接口声明了与组件交流的方法, 但通常仅包括一个通知方法。 组件可将任意上下文 (包括自己的对象) 作为该方法的参数, 只有这样接收组件和发送者类之间才不会耦合。
-
具体中介者 (Concrete Mediator) 封装了多种组件间的关系。 具体中介者通常会保存所有组件的引用并对其进行管理, 甚至有时会对其生命周期进行管理。
-
组件并不知道其他组件的情况。 如果组件内发生了重要事件, 它只能通知中介者。 中介者收到通知后能轻易地确定发送者, 这或许已足以判断接下来需要触发的组件了。
优缺点
优点:
-
单一职责原则。 你可以将多个组件间的交流抽取到同一位置, 使其更易于理解和维护。
-
开闭原则。 你无需修改实际组件就能增加新的中介者。
-
你可以减轻应用中多个组件间的耦合情况。
-
你可以更方便地复用各个组件。
缺点:
- 一段时间后, 中介者可能会演化成为上帝对象。
理解体会
中介者模式是一种行为设计模式,它通过引入一个中介对象来封装一系列对象之间的交互,使得对象之间不需要显式地相互引用,从而降低它们之间的耦合度。不管是空中交通控制塔的例子,还是聊天室的例子,都可以非常好的使用。
当一些对象和其他对象紧密耦合以致难以对其进行修改时, 可使用中介者模式。
当组件因过于依赖其他组件而无法在不同应用中复用时, 可使用中介者模式。
如果为了能在不同情景下复用一些基本行为, 导致你需要被迫创建大量组件子类时, 可使用中介者模式。