适配器模式与桥接模式可组合使用:适配器解决接口不兼容,桥接解耦抽象与实现;Go通过接口组合、结构体嵌入和函数字段自然支持该协作,如Logger抽象层与LogWriter实现层分离,并用StdLoggerAdapter适配旧日志函数。
适配器模式和桥接模式可以组合使用,解决“接口不兼容”与“实现紧耦合”两个问题:适配器负责对接已有接口,桥接负责解耦抽象与实现。Golang 没有继承多态,但通过接口组合、结构体嵌入和函数字段,能自然表达这两种模式的协作逻辑。
先设计一个高层业务接口,它不关心底层如何实现,只声明行为契约:
例如日志记录器抽象:
type Logger interface {这个接口是桥接模式中的“抽象(Abstraction)”,后续可被不同业务模块依赖,而无需绑定具体实现。
将具体输出方式(文件、网络、控制台)抽为独立类型,实现同一接口或提供可桥接的函数:
这样抽象(Logger)和实现(LogWriter)完全解耦,可独立变化。
当第三方库提供的是 func(string) 或带额外参数的函数(如 log.Printf),无法直接满足 Logger.Log 接口时,就需适配器:
s", level, msg) }
最终的桥接实现类(如 BridgeLogger)不直接调用 fmt.Println,而是持有一个 Logger 接口字段:
type BridgeLogger struct {此时,适配器让旧代码“能进桥接”,桥接让新架构“可换实现”。两者配合,既兼容又灵活。