type
status
date
slug
summary
tags
category
icon
password
整理定义
中文名称:中介者模式
英文名称:mediator pattern
出处 | 定义 |
中国大百科全书 | 用一个中介对象来封装一系列对象的交互,从而把一批原来可能是交互关系复杂的对象转换成一组松散耦合的中间对象 |
设计模式 | 中介者模式是一种行为设计模式, 能让你减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互, 迫使它们通过一个中介者对象进行合作。 |
百度百科 | 一种设计模式。用一个中介对象来封装一系列对象的交互,从而把一批原来可能是交互关系复杂的对象转换成一组松散耦合的中间对象,以有利于维护和修改。 |
维基百科 | 在软件工程中,中介者模式定义了一个对象,该对象封装了一组对象如何交互。 该模式被认为是一种行为模式,因为它可以改变程序的运行行为。
在面向对象编程中,程序通常由许多类组成。 业务逻辑和计算分布在这些类中。 然而,随着更多的类被添加到程序中,特别是在维护和/或重构期间,这些类之间的通信问题可能变得更加复杂。 这使得程序更难阅读和维护。 此外,更改程序可能会变得困难,因为任何更改都可能影响其他几个类中的代码。 |
复述展开
What is mediator pattern?
中介者模式是一种行为设计模式。它使用一个中介者对象,来封装一组对象的交互,从而将原本交互关系复杂的对象转换成一组松散耦合的中间对象。该模式有利于系统的维护和修改。
🌰*1
空中交通控制塔:飞行器驾驶员们在靠近或离开空中管制区域时不会直接相互交流。 但他们会与飞机跑道附近, 塔台中的空管员通话。 如果没有空管员, 驾驶员就需要留意机场附近的所有飞机, 并与数十位飞行员组成的委员会讨论降落顺序。 那恐怕会让飞机坠毁的统计数据一飞冲天吧。
🌰*2
聊天室:在一个聊天室中,用户发送的消息是通过服务器(中介者)转发的,而不是直接发送给其他用户。这样,用户就不需要知道其他用户的详细信息,只需要将消息发送给服务器,服务器会负责将消息转发给其他用户。
🌰*3
图形用户界面(GUI):在许多图形用户界面中,各种组件(如按钮、文本框等)之间的交互通常是通过一个中介者对象(如窗口或对话框)来协调的。例如,当一个按钮被点击时,它不会直接改变一个文本框的内容,而是通知中介者对象,然后由中介者对象来改变文本框的内容。
中介者模式结构
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2Fdea38628-64dc-40fd-8d17-2efa87e3d554%2F09d87bc2-a63c-4581-9510-469ca7d986c6%2FUntitled.png?table=block&id=39d2843d-3723-41e5-aa50-0c36ac344833&t=39d2843d-3723-41e5-aa50-0c36ac344833&width=1040&cache=v2)
- 组件 (Component) 是各种包含业务逻辑的类。 每个组件都有一个指向中介者的引用, 该引用被声明为中介者接口类型。 组件不知道中介者实际所属的类, 因此你可通过将其连接到不同的中介者以使其能在其他程序中复用。
- 中介者 (Mediator) 接口声明了与组件交流的方法, 但通常仅包括一个通知方法。 组件可将任意上下文 (包括自己的对象) 作为该方法的参数, 只有这样接收组件和发送者类之间才不会耦合。
- 具体中介者 (Concrete Mediator) 封装了多种组件间的关系。 具体中介者通常会保存所有组件的引用并对其进行管理, 甚至有时会对其生命周期进行管理。
- 组件并不知道其他组件的情况。 如果组件内发生了重要事件, 它只能通知中介者。 中介者收到通知后能轻易地确定发送者, 这或许已足以判断接下来需要触发的组件了。
对于组件来说, 中介者看上去完全就是一个黑箱。 发送者不知道最终会由谁来处理自己的请求, 接收者也不知道最初是谁发出了请求。
优缺点
优点:
- 单一职责原则。 你可以将多个组件间的交流抽取到同一位置, 使其更易于理解和维护。
- 开闭原则。 你无需修改实际组件就能增加新的中介者。
- 你可以减轻应用中多个组件间的耦合情况。
- 你可以更方便地复用各个组件。
缺点:
- 一段时间后, 中介者可能会演化成为上帝对象。
理解体会
中介者模式是一种行为设计模式,它通过引入一个中介对象来封装一系列对象之间的交互,使得对象之间不需要显式地相互引用,从而降低它们之间的耦合度。不管是空中交通控制塔的例子,还是聊天室的例子,都可以非常好的使用。
当一些对象和其他对象紧密耦合以致难以对其进行修改时, 可使用中介者模式。
当组件因过于依赖其他组件而无法在不同应用中复用时, 可使用中介者模式。
如果为了能在不同情景下复用一些基本行为, 导致你需要被迫创建大量组件子类时, 可使用中介者模式。
快速跳转链接
【概念解析】启动
【概念解析】Day 1 - 10
【概念解析】Day 11 - 20
【概念解析】Day 21 - 30
【概念解析】Day 31 - 40
【概念解析】Day 41 - 50
【概念解析】Day 51 - 60
【概念解析】Day 61 - 70
【概念解析】Day 71 - 80
【概念解析】Day 81 - 90
- 作者:eachenkuang
- 链接:https://kuangyichen.com/article/industry-day43
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。