桥接模式在Go中通过接口组合与结构体嵌入解耦抽象与实现。定义细粒度Implementor接口封装底层行为,抽象层聚合该接口并委托调用,支持双向独立扩展,利用Go隐式接口和组合语法简化实现。
桥接模式的核心是把抽象(Abstraction)和实现(Implementation)解耦,让二者可以独立变化。在 Go 中没有传统面向对象的“继承层级”,但通过接口组合、结构体嵌入和依赖注入,完全可以优雅实现桥接——关键是让抽象层只依赖实现层的接口,而非具体类型。
先设计一个稳定、细粒度的接口,封装底层行为。例如绘图系统中,不关心是画在屏幕还是 SVG 文件上:
DrawLine, DrawCircle)抽象层持有实现接口的字段,所有业务逻辑通过该接口调用。比如图形编辑器的 Shape 不直接绘图,而是委托给 Renderer:
桥接的价值在于两个方向都能独立增补:新增图形类型(抽象扩展)无需改渲染器;新增输出目标(实现扩展)也不影响已有图形逻辑:
Shape(如 BezierCurve),只需实现其 Render(r Renderer) 方法,复用全部已有的 Renderer
Renderer(如 PNGRenderer),只要实现接口方法,所有现有 Shape 立即可用利用 Go 的隐式接口实现和组合语法,桥接代码更轻量:
type Shape struct{ Renderer },之后可直接 s.DrawLine(...))桥接不是为模式而模式。当发现代码里频繁出现“if renderer == SVG { … } else if renderer == OpenGL { … }”,或每次加一个新功能就要在多个地方改 case 分支,就是桥接该出场的时候了。