Skip to content
← 返回设计模式列表
设计意图与对象责任

中介者 ​

由中介对象协调多个对象。

行为型

说明 ​

当组件之间有复杂的两两依赖时,把协调逻辑集中到一个对象。

分析 ​

Client 只把消息交给 Hub,而不直接持有其他 Client 的引用。Hub 可以集中决定广播、路由或过滤规则,减少组件之间的两两依赖。

Alice 只知道 Hub,Hub 在示例中只把消息追加到列表,并没有真正广播给其他客户端。将来增加路由时,应让 Hub 负责接收者选择,客户端负责自己的行为;把存储、认证和所有业务都塞入 Hub 会形成新的集中耦合。并发发送还需保护共享 Messages。

查看图表代码

适用前提与边界 ​

中介者也可能膨胀成过大的协调中心,需要保持职责清晰。 交互流程很短且稳定时,直接调用通常更容易理解。

示例输入与调用 ​

go
hub := new(Hub)
	alice := Client{Name: "Alice", Hub: hub}
	alice.Send("hello")
	fmt.Println(hub.Messages)

运行输出 ​

text
[Alice: hello]

完整 Go 示例 ​

go
package main

import "fmt"

type Hub struct{ Messages []string }

func (h *Hub) Send(from, text string) {
	h.Messages = append(h.Messages, from+": "+text)
}

type Client struct {
	Name string
	Hub  *Hub
}

func (c Client) Send(text string) {
	c.Hub.Send(c.Name, text)
}

func main() {
	hub := new(Hub)
	alice := Client{Name: "Alice", Hub: hub}
	alice.Send("hello")
	fmt.Println(hub.Messages)
}

继续阅读