适配器模式通过包装结构体将第三方接口转换为系统所需接口,例如用LoggerAdapter实现Logger接口并转发调用至ThirdPartyLogger的Write方法,使不兼容类型协同工作。

在Go语言中,适配器模式常用于让不兼容的接口能够协同工作。通过一个中间结构体将一个类的接口转换成客户端期望的另一个接口,从而实现代码复用和系统集成。下面介绍如何使用适配器模式解决接口不匹配的问题。
理解适配器模式的核心思想
适配器模式的关键在于“转换”。当现有类型的方法签名与目标接口不一致时,可以通过适配器包装原类型,暴露符合目标接口的新方法。
例如:有一个旧服务提供数据但接口不符合当前需求,而新逻辑依赖某个标准接口。此时可用适配器将其“包装”成标准形式。
定义目标接口和已有类型
假设我们需要统一处理日志输出,所有处理器需实现 Logger 接口:
type Logger interface {
Log(message string)
}
但第三方库提供了另一种日志结构:
立即学习“go语言免费学习笔记(深入)”;
type ThirdPartyLogger struct{}
func (t *ThirdPartyLogger) Write(msg string) {
fmt.Println("ThirdParty:", msg)
}
它的 Write 方法无法直接满足 Logger 的 Log 要求,需要适配。
英文企业网站管理系统(英文网站设计系统)采用主流的Asp+Access开发设计,开发新英文模板,漂亮大气。是方便自主管理的英文网站建设系统,程序小巧,速度快,后台一站式管理,代码功能全部开源,无任何限制。支持所有Asp虚拟空间,兼容良好,程序采用Div+Css设计,兼容ie6、ie7、ie8、火狐等英文浏览器,网站优化结构设计,配置网站地图,容易被搜索引擎收录,上关键词排名!欢迎大家使用。程序功能
创建适配器连接两者
编写一个适配器结构体,内部持有第三方实例,并实现目标接口:
type LoggerAdapter struct {
thirdParty *ThirdPartyLogger
}
func (a *LoggerAdapter) Log(message string) {
a.thirdParty.Write(message)
}
这样,LoggerAdapter 就把 Write 映射到了 Log 上,完成了接口转换。
在实际调用中使用适配器
现在可以将适配后的对象传给任何接受 Logger 的函数:
func ProcessLog(logger Logger) {
logger.Log("处理开始")
}
// 使用方式:
thirdParty := &ThirdPartyLogger{}
adapter := &LoggerAdapter{thirdParty: thirdParty}
ProcessLog(adapter) // 正常运行,输出:ThirdParty: 处理开始
通过适配器,原有组件无需修改即可融入新系统。
基本上就这些。Go语言没有继承,但通过组合和接口隐式实现,适配器模式非常自然且常用。只要构造一个包装结构体,实现所需方法并转发调用,就能轻松完成接口兼容。关键是理解“行为转换”而非“类型继承”。









