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

桥接 ​

让抽象与实现独立变化。

结构型

说明 ​

两个变化维度会交叉组合时,用接口连接,避免为每个组合建子类。

分析 ​

Page 表示要展示的内容,Renderer 决定如何渲染;两者可以分别增加新类型。需要文本和 HTML、终端等多种输出组合时,这比为每个组合创建独立类型更容易维护。

Page 拥有内容,Renderer 拥有输出方式,两者通过组合连接。增加文本渲染器不必为每个页面再造一个类型;只有一个固定输出时,直接函数可能更简单。当前 HTML 实现直接拼接字符串,真实用户文本需要上下文转义或模板库,桥接本身不提供输出安全。

查看图表代码

适用前提与边界 ​

接口边界应放在真正会独立变化的能力上。 只有接口适配或独立变化确实存在时,才增加额外包装层。

示例输入与调用 ​

go
page := Page{Renderer: HTML{}, Text: "Hello"}
	fmt.Println(page.Show())

运行输出 ​

text
<p>Hello</p>

完整 Go 示例 ​

go
package main

import "fmt"

type Renderer interface{ Render(string) string }
type HTML struct{}

func (HTML) Render(s string) string {
	return "<p>" + s + "</p>"
}

type Page struct {
	Renderer Renderer
	Text     string
}

func (p Page) Show() string {
	return p.Renderer.Render(p.Text)
}

func main() {
	page := Page{Renderer: HTML{}, Text: "Hello"}
	fmt.Println(page.Show())
}

继续阅读