首页 > 后端开发 > Golang > 正文

如何使用Golang实现适配器模式_使用Adapter Pattern兼容不同接口

P粉602998670
发布: 2025-12-12 12:24:07
原创
847人浏览过
适配器模式在Go中通过组合和接口嵌入实现,核心是让不兼容类型满足统一接口;定义目标接口Notifier和已有类型EmailSender/SMSSender,再创建EmailAdapter/SMSAdapter结构体桥接行为,最后统一调用Alert函数。

如何使用golang实现适配器模式_使用adapter pattern兼容不同接口

适配器模式的核心是让不兼容的接口能一起工作——Golang 没有继承,但通过组合和接口嵌入,实现起来更轻量、更清晰。

定义目标接口与已有类型

先明确你希望统一对外暴露的接口(Target),再确认已有类型(Adaptee)的行为。比如:

  • 目标接口:Notifier 要求有 Send(message string) 方法;
  • 已有类型:EmailSenderSendEmail(to, body string)SMSSenderSendSMS(phone, text string) —— 它们无法直接满足 Notifier

编写适配器结构体,组合并桥接行为

适配器不是改造原有类型,而是新建一个结构体,内嵌或持有 Adaptee,并实现 Target 接口:

type EmailAdapter struct {
    emailSender *EmailSender
}

func (e *EmailAdapter) Send(message string) {
    e.emailSender.SendEmail("admin@example.com", message)
}

type SMSAdapter struct {
    smsSender *SMSSender
}

func (s *SMSAdapter) Send(message string) {
    s.smsSender.SendSMS("13800138000", message)
}
登录后复制

注意:适配器只负责“翻译”调用,不改变原逻辑。参数映射、默认值填充、错误转换等都在这里处理。

立即学习go语言免费学习笔记(深入)”;

统一使用,隐藏底层差异

现在你可以把不同适配器当成同一类型传入业务逻辑:

NNiji·Journey
NNiji·Journey

二次元风格绘画生成器,由 Spellbrush 与 Midjourney 共同设计开发

NNiji·Journey 61
查看详情 NNiji·Journey
func Alert(n Notifier, msg string) {
    n.Send(msg) // 不关心背后是邮件还是短信
}

Alert(&EmailAdapter{&EmailSender{}}, "服务器宕机!")
Alert(&SMSAdapter{&SMSSender{}}, "服务器宕机!")
登录后复制

新增渠道(如 DingTalk、Webhook)只需写新适配器,不修改 Alert 或其他依赖 Notifier 的代码。

进阶:用函数适配器简化简单场景

如果 Adaptee 是简单函数,可直接用闭包构造适配器,避免定义结构体:

func NewHTTPNotifier(client *http.Client, url string) Notifier {
    return Notifier(func(msg string) {
        http.Post(url, "text/plain", strings.NewReader(msg))
    })
}
登录后复制

这种函数式适配器适合轻量集成,代码更紧凑,也符合 Go 的务实风格。

基本上就这些。Go 的适配器不靠继承靠组合,不靠抽象类靠接口,写起来干净,维护时也容易替换——关键在于分清谁是契约(接口)、谁是实现(具体类型)、谁是胶水(适配器)。

以上就是如何使用Golang实现适配器模式_使用Adapter Pattern兼容不同接口的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号