Golang如何使用桥接模式_Golang 桥接模式实现实践

桥接模式通过接口与组合解耦抽象与实现,如消息类型与发送方式可独立扩展,Go中利用MessageSender接口及嵌入结构体实现灵活组合,新增类型或发送方式无需修改现有代码,符合开闭原则。

golang如何使用桥接模式_golang 桥接模式实现实践

桥接模式是一种结构型设计模式,它的核心思想是将抽象部分与实现部分分离,使它们可以独立变化。在 Go 语言中,虽然没有继承机制,但通过接口和组合的方式能非常自然地实现桥接模式。这种模式特别适用于当你有一组抽象逻辑,同时有多套实现方式,并且希望两者能独立扩展时。

理解桥接模式的核心结构

桥接模式的关键在于“解耦”——把高层逻辑(抽象)和底层实现分开。它包含两个主要部分:

Abstraction(抽象):定义高层控制逻辑,持有一个指向实现接口的引用。 Implementor(实现):提供底层行为的接口,具体实现由子类型完成。

在 Go 中,我们用接口表示 Implementor,用结构体嵌入或字段持有接口来实现组合关系。

Go 中桥接模式的实际实现

假设我们要实现一个消息通知系统,支持多种发送方式(如邮件、短信),同时支持不同消息类型(普通、紧急)。我们可以将“发送方式”作为实现层,“消息类型”作为抽象层。

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

定义实现接口:发送方式

先定义一个发送器接口:

type MessageSender interface {
Send(message string) error
}

然后实现具体的发送方式:

type EmailSender struct{}

func (e *EmailSender) Send(message string) error {
fmt.Println("通过邮件发送:", message)
return nil
}
type SMSSender struct{}

func (s *SMSSender) Send(message string) error {
fmt.Println("通过短信发送:", message)
return nil
}

定义抽象层:消息类型

创建一个通用的消息结构体,持有发送器接口:

type Message struct {
sender MessageSender
}

设置发送器:

func (m *Message) SetSender(sender MessageSender) {
m.sender = sender
}

实现不同类型的消息生成和发送:

type NormalMessage struct {
*Message
}
func (n *NormalMessage) Notify(content string) {
n.sender.Send("【普通】" + content)
}
type UrgentMessage struct {
*Message
}
func (u *UrgentMessage) Notify(content string) {
u.sender.Send("【紧急】" + content)
}

使用示例与运行效果

现在可以在主程序中灵活组合不同的消息类型和发送方式:

func main() {
email := &EmailSender{}
sms := &SMSSender{}

normal := &NormalMessage{&Message{}}
urgent := &UrgentMessage{&Message{}}

normal.SetSender(email)
normal.Notify("系统即将维护")

urgent.SetSender(sms)
urgent.Notify("服务器宕机!")
}

输出结果:

通过邮件发送: 【普通】系统即将维护
通过短信发送: 【紧急】服务器宕机!

可以看到,抽象(Normal/Urgent)和实现(Email/SMS)完全解耦,任意组合都可自由切换。

桥接模式的优势与适用场景

使用桥接模式后,新增一种消息类型无需修改任何发送逻辑,增加一种发送方式也不影响现有消息类。这符合开闭原则。

常见适用场景包括:

跨平台应用开发(同一功能在不同操作系统上的实现) 图形渲染引擎(不同图形算法配合不同设备输出) 日志系统(不同日志级别对应多种输出目标)

基本上就这些。Go 的接口和组合机制让桥接模式实现简洁而高效,不需要复杂的继承体系也能达到高度灵活的设计目标。

以上就是Golang如何使用桥接模式_Golang 桥接模式实现实践的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1427263.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
使用Go和App Engine实现高并发分片计数器:Task Queue最佳实践
上一篇 2025年12月16日 21:13:59
Golang如何使用go mod初始化项目_Golang go mod初始化实践
下一篇 2025年12月16日 21:14:13

相关推荐

  • 洗护行业不卷价格,差异化创新谋未来

    洗护行业不卷价格,差异化创新谋未来洗护行业不卷价格,差异化创新谋未来洗护行业不卷价格,差异化创新谋未来洗护行业不卷价格,差异化创新谋未来

    9月25日,由中国家电网主办的“净·呵护多·自由悦·美居2025中国家庭洗衣及烘护行业高峰论坛”在山东济南召开,来自澳柯玛、博世家电、卡萨帝、海尔、海立、海信、leader、小天鹅、荣事达、西门子家电、tcl、东芝、小鸭集团的洗护行业上下游企业代表,以及渠道合作伙伴京东家电家居、数据机构gfk中国、…

    2026年9月26日 • 用户投稿
    000
  • 《宿命残响:艾尔兰特的灰烬》现已正式发售!

    《宿命残响:艾尔兰特的灰烬》现已正式发售!《宿命残响:艾尔兰特的灰烬》现已正式发售!《宿命残响:艾尔兰特的灰烬》现已正式发售!《宿命残响:艾尔兰特的灰烬》现已正式发售!

    来源:官方 由Deck13 Spotlight与Matthias Linda全新成立的工作室Umami Tiger联合推出,备受赞誉的JRPG作品《宿命残响》的全新DLC——《艾尔兰特的灰烬》,将于8月7日正式发售,登陆PC、Xbox Series X|S、Xbox One、PlayStation …

    2026年9月26日 • 用户投稿
    000
  • OPPO Find X8 Ultra 获推满血 ColorOS 15 影像功能大升级

    OPPO Find X8 Ultra 获推满血 ColorOS 15 影像功能大升级OPPO Find X8 Ultra 获推满血 ColorOS 15 影像功能大升级OPPO Find X8 Ultra 获推满血 ColorOS 15 影像功能大升级OPPO Find X8 Ultra 获推满血 ColorOS 15 影像功能大升级

    近期,oppo 正式对外发布消息,find x8 ultra 手机将获得满血版 coloros 15 系统的更新。这次更新涵盖了许多新功能和改进,特别是在影像技术上取得了长足的进步。 在摄影方面,本次更新引入了视频专家模式,以更好地迎合专业用户的个性化需求。原有的电影模式已经升级为专业的视频模式,允…

    2026年9月26日 • 用户投稿
    200
  • Safari浏览器如何重置到初始设置_Safari浏览器恢复默认出厂设置操作

    Safari浏览器如何重置到初始设置_Safari浏览器恢复默认出厂设置操作Safari浏览器如何重置到初始设置_Safari浏览器恢复默认出厂设置操作Safari浏览器如何重置到初始设置_Safari浏览器恢复默认出厂设置操作Safari浏览器如何重置到初始设置_Safari浏览器恢复默认出厂设置操作

    重置Safari可解决运行缓慢、加载异常等问题。首先通过Safari偏好设置清除历史记录与网站数据,并恢复各项功能至默认值;若问题依旧,可使用终端命令删除偏好文件及缓存实现深度重置;也可通过系统设置一次性清除所有浏览数据与扩展信息,重启后恢复初始状态。 如果您发现Safari浏览器运行缓慢、页面加载…

    2026年9月26日 • 用户投稿
    100
  • 检查型异常(Checked Exception)和非检查型异常(Unchecked Exception)的区别?

    检查型异常(Checked Exception)和非检查型异常(Unchecked Exception)的区别?检查型异常(Checked Exception)和非检查型异常(Unchecked Exception)的区别?检查型异常(Checked Exception)和非检查型异常(Unchecked Exception)的区别?检查型异常(Checked Exception)和非检查型异常(Unchecked Exception)的区别?

    检查型异常由编译器强制处理,代表可预期的外部问题,如文件不存在;非检查型异常为运行时异常,通常由程序逻辑错误引起,编译器不强制捕获。前者需显式处理或声明,体现健壮性设计;后者应通过预防避免,体现“快速失败”原则。自定义异常时,若调用方可恢复或需处理,应继承Exception;若为内部错误,则继承Ru…

    2026年9月26日 • 用户投稿
    000
  • 顶级学术会议MICCAI最高奖项披露,华人科学家首次获奖!

    顶级学术会议MICCAI最高奖项披露,华人科学家首次获奖!顶级学术会议MICCAI最高奖项披露,华人科学家首次获奖!顶级学术会议MICCAI最高奖项披露,华人科学家首次获奖!顶级学术会议MICCAI最高奖项披露,华人科学家首次获奖!

    9 月 23 日至 27 日,2025 年国际医学影像计算与计算机辅助介入协会(miccai)年会在韩国隆重举行。在此期间,上海科技大学生物医学工程学院创始院长、联影智能联席 ceo 沈定刚荣获大会颁发的 miccai enduring impact award (eia) 持久影响力奖,成为该奖项…

    2026年9月26日 • 用户投稿
    000
  • 2025高分辨率图片生成AI工具Top10榜单

    2025年高分辨率AI图像生成工具将实现技术突破,榜单预测包括DeepImage AI Pro 2025、NVIDIA AI Imaginer 5.0等十款产品,涵盖生成质量、速度、细节控制、Prompt理解与软件兼容性五大维度;当前技术瓶颈集中在计算资源需求大、算法优化难、数据标注成本高,而未来趋…

    2026年9月26日
    200
  • synchronized 关键字的实现原理是什么?它是如何保证线程安全的?

    synchronized 关键字的实现原理是什么?它是如何保证线程安全的?synchronized 关键字的实现原理是什么?它是如何保证线程安全的?synchronized 关键字的实现原理是什么?它是如何保证线程安全的?synchronized 关键字的实现原理是什么?它是如何保证线程安全的?

    synchronized 是 Java 中保证线程安全的核心机制,其本质是通过 JVM 内置的 Monitor(监视器)实现互斥访问。当多个线程竞争同步资源时,synchronized 依靠对象头中的 Mark Word 和锁升级机制(偏向锁 → 轻量级锁 → 重量级锁)动态调整锁的实现方式,以平衡…

    2026年9月26日 • 用户投稿
    100
  • 华硕灵珑主机风扇转速异常?风扇 PWM 调速芯片老化故障诊断​

    华硕灵珑主机风扇转速异常?风扇 PWM 调速芯片老化故障诊断​华硕灵珑主机风扇转速异常?风扇 PWM 调速芯片老化故障诊断​华硕灵珑主机风扇转速异常?风扇 PWM 调速芯片老化故障诊断​华硕灵珑主机风扇转速异常?风扇 PWM 调速芯片老化故障诊断​

    华硕灵珑主机风扇转速异常主要是硬件问题。1. 首先通过进入bios检查风扇转速,若在bios中转速异常,则为硬件故障;2. 更新主板bios,若无效则进一步排查;3. 检查风扇4pin接口是否插好或插反;4. 若更换风扇后仍高转,可能是pwm调速芯片老化损坏,需用万用表或示波器检测信号线电压和波形,…

    2026年9月26日 • 用户投稿
    300
  • windows pagefile.sys是什么可以删除吗_pagefile.sys文件详解与删除指南

    windows pagefile.sys是什么可以删除吗_pagefile.sys文件详解与删除指南windows pagefile.sys是什么可以删除吗_pagefile.sys文件详解与删除指南windows pagefile.sys是什么可以删除吗_pagefile.sys文件详解与删除指南windows pagefile.sys是什么可以删除吗_pagefile.sys文件详解与删除指南

    pagefile.sys是Windows虚拟内存文件,用于缓解物理内存压力,直接删除会导致系统不稳定或蓝屏。应通过“高级系统设置”中的虚拟内存选项禁用或迁移,避免手动删除。可将其移至非系统盘或设置自定义大小以优化性能,建议初始值为内存1倍、最大值2倍,并通过命令行工具查看配置状态。 如果您发现Win…

    2026年9月26日 • 用户投稿
    000
  • 苹果系统升级后可以降回去吗

    苹果系统升级后可以降回去吗苹果系统升级后可以降回去吗苹果系统升级后可以降回去吗苹果系统升级后可以降回去吗

    是的,苹果设备在满足一定条件下可以降级到之前的系统版本。条件包括:升级后的几天内进行降级、使用 iTunes 或 Finder、拥有升级前操作系统的固件文件。降级操作会抹除所有数据,因此建议事先备份。降级步骤包括:备份、下载固件文件、进入还原模式、连接到 iTunes 或 Finder、选择“还原”…

    2026年9月26日 • 用户投稿
    100
  • 谈谈你对Java平台的理解,什么是“一次编写,到处运行”?

    谈谈你对Java平台的理解,什么是“一次编写,到处运行”?谈谈你对Java平台的理解,什么是“一次编写,到处运行”?谈谈你对Java平台的理解,什么是“一次编写,到处运行”?谈谈你对Java平台的理解,什么是“一次编写,到处运行”?

    Java虚拟机(JVM)是实现“一次编写,到处运行”的核心,它通过将Java字节码翻译为特定平台的机器码,屏蔽了底层差异,实现跨平台兼容;同时JVM提供内存管理、垃圾回收和JIT编译等机制,保障程序的高效与稳定运行。尽管存在JNI依赖、UI差异、性能波动和环境配置等挑战,Java仍凭借其强大生态在企…

    2026年9月26日 • 用户投稿
    000
  • 新机遇、新体验、新服务,HarmonyOS 游戏领启未来

    新机遇、新体验、新服务,HarmonyOS 游戏领启未来新机遇、新体验、新服务,HarmonyOS 游戏领启未来新机遇、新体验、新服务,HarmonyOS 游戏领启未来新机遇、新体验、新服务,HarmonyOS 游戏领启未来

    【中国,上海,2025年7月31日】2025年中国国际数字娱乐产业大会(cdec)高峰论坛顺利举行。华为终端云服务互动媒体bu总裁张思建在题为《技术赋能体验创新 harmonyos 游戏领启未来》的演讲中指出,随着harmonyos 5设备数量突破千万大关,鸿蒙系统5已成功通过大规模市场验证,整体用…

    2026年9月26日 • 用户投稿
    400
  • 安装 Windows 系统时,选择 UEFI 启动和 Legacy 启动有什么区别?

    安装 Windows 系统时,选择 UEFI 启动和 Legacy 启动有什么区别?安装 Windows 系统时,选择 UEFI 启动和 Legacy 启动有什么区别?安装 Windows 系统时,选择 UEFI 启动和 Legacy 启动有什么区别?安装 Windows 系统时,选择 UEFI 启动和 Legacy 启动有什么区别?

    应选择UEFI启动。UEFI是现代标准,支持GPT分区、超过2TB硬盘、更快启动和Secure Boot安全功能;Legacy仅用于老旧硬件或32位系统兼容。安装时需确保启动模式与分区表(UEFI+GPT,Legacy+MBR)匹配,否则会导致无法安装或启动系统。 在安装 Windows 系统时,选…

    2026年9月26日 • 用户投稿
    200
  • 率先完成 30TB 硬盘测试,希捷携手百度开启 AI 存储新纪元

    率先完成 30TB 硬盘测试,希捷携手百度开启 AI 存储新纪元率先完成 30TB 硬盘测试,希捷携手百度开启 AI 存储新纪元率先完成 30TB 硬盘测试,希捷携手百度开启 AI 存储新纪元率先完成 30TB 硬盘测试,希捷携手百度开启 AI 存储新纪元

    在人工智能技术迅猛发展的背景下,从大规模模型训练到广泛的边缘计算应用,数据以前所未有的速度不断产生。根据 idc 的预测,至 2028 年全球将生成高达 394zb 的数据,其中生成式 ai 贡献超过 100zb。面对如此庞大的数据体量,如何实现安全存储与高效管理,成为亟需解决的关键问题。对于承载数…

    2026年9月26日 • 用户投稿
    100
  • 豆包AI是否能生成代码 豆包代码生成功能及其适用范围分析

    本文将围绕豆包AI是否能生成代码这一问题展开探讨。我们将首先确认其代码生成能力,随后详细讲解如何有效利用此功能,并通过步骤拆解,帮助用户掌握操作过程。最后,会分析该功能的适用场景与潜在局限,以便用户能更全面地理解和运用。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 Deep…

    2026年9月26日
    100
  • 如何利用Nginx日志进行安全监控

    如何利用Nginx日志进行安全监控如何利用Nginx日志进行安全监控如何利用Nginx日志进行安全监控如何利用Nginx日志进行安全监控

    保障网站和应用安全,Nginx日志安全监控至关重要。本文将详细介绍关键步骤和最佳实践。 一、Nginx日志配置与启用 默认配置: Nginx通常已启用访问日志和错误日志记录。请确保日志文件配置正确并妥善存储。日志格式: 建议使用标准日志格式,方便后续分析。例如: log_format main ‘$…

    2026年9月26日 • 用户投稿
    000
  • 构建健壮的Java用户输入:Scanner整数解析与异常捕获

    构建健壮的Java用户输入:Scanner整数解析与异常捕获构建健壮的Java用户输入:Scanner整数解析与异常捕获构建健壮的Java用户输入:Scanner整数解析与异常捕获构建健壮的Java用户输入:Scanner整数解析与异常捕获

    本文深入探讨了Java Scanner在获取整数输入时,当用户输入非整数数据可能引发的InputMismatchException。我们将解释此异常的产生机制,并提供一种健壮的解决方案:通过结合try-catch语句有效捕获并处理该异常,从而避免程序崩溃,提升用户交互的稳定性与友好性。 1. Jav…

    2026年9月26日 • 用户投稿
    000
  • sublime怎么配置golang build system_sublime Golang Build System配置

    sublime怎么配置golang build system_sublime Golang Build System配置sublime怎么配置golang build system_sublime Golang Build System配置sublime怎么配置golang build system_sublime Golang Build System配置sublime怎么配置golang build system_sublime Golang Build System配置

    首先确保Go环境已安装并可用,然后在Sublime Text中创建自定义构建系统:通过Tools → Build System → New Build System添加支持go run、go build和gofmt的JSON配置,保存为Go.sublime-build至User目录;之后在.go文件…

    2026年9月26日 • 用户投稿
    100
  • 格子达查重入口官网地址—格子达学位论文检测入口

    格子达查重入口官网地址—格子达学位论文检测入口格子达查重入口官网地址—格子达学位论文检测入口格子达查重入口官网地址—格子达学位论文检测入口格子达查重入口官网地址—格子达学位论文检测入口

    格子达查重入口官网地址是www.gezida.com,用户可通过该网站登录格子达Gocheck系统进行论文重复率检测,支持多格式上传、智能比对与报告生成。 格子达查重入口官网地址在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来格子达学位论文检测入口官网地址,感兴趣的网友一起随小编来瞧瞧吧!…

    2026年9月26日 • 用户投稿
    000

发表回复

登录后才能评论
关注微信