桥接模式通过接口与组合分离抽象与实现,Go语言中以NotifySender接口定义发送方式,Notification结构体组合该接口实现多类型通知与多渠道发送的解耦,新增通知类型或发送方式无需修改原有代码,提升扩展性与维护性。
桥接模式的核心思想是将抽象部分与实现部分分离,使它们可以独立变化。在 Go 语言中,由于没有继承机制,桥接模式通过接口和组合的方式天然地得到了支持。这种方式让代码更具扩展性,尤其适合多维度变化的场景。
桥接模式包含两个核心部分:
两者通过组合连接,而不是继承,从而实现解耦。
假设我们要实现一个通知系统,支持多种消息类型(如普通通知、紧急通知),同时支持多种发送方式(如邮件、短信、钉钉)。如果用传统方式,每增加一种类型或渠道,都要新增类,导致类爆炸。使用桥接模式可有效解决这个问题。
定义实现接口:发送方式先定义一个发送器接口,表示不同的通知渠道:
type NotifySender 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 Notification struct {
sender NotifySender
}
func NewNotification(sender NotifySender) *Notification {
return &Notification{sender: sender}
}
扩展不同类型的通知:
type NormalNotification struct {
*Notification
}
func NewNormalNotification(sender NotifySender) *NormalNotification {
return &NormalNotification{
Notification: NewNotification(sender),
}
}
func (n *NormalNotification) Notify(msg string) {
n.sender.Send("【普通】" + msg)
}
type UrgentNotification struct {
*Notification
}
func NewUrgentNotification(sender NotifySender) *UrgentNotification {
return &UrgentNotification{
Notification: NewNotification(sender),
}
}
func (u *UrgentNotification) Notify(msg string) {
u.sender.Send("【紧急】" + msg)
}
现在可以自由组合通知类型和发送方式:
func main() {
email
:= &EmailSender{}
sms := &SmsSender{}
normalEmail := NewNormalNotification(email)
urgentSms := NewUrgentNotification(sms)
normalEmail.Notify("系统即将维护")
urgentSms.Notify("服务器宕机!")
}
输出:
通过邮件发送: 【普通】系统即将维护
通过短信发送: 【紧急】服务器宕机!
如果需要新增“钉钉发送”,只需实现 NotifySender 接口;如果要加“定时通知”,只需扩展抽象部分。两者互不影响。
基本上就这些。Go 的接口和组合机制让桥接模式实现简洁自然,无需复杂设计,就能达到高内聚低耦合的效果。
# go
# golang
# go语言
# ai
# 钉钉
# String
# Error
# 结构体
# 继承
# 接口
# Struct
# Interface
相关文章:
微课制作网站有哪些,微课网怎么进?
建站之星安装后界面空白如何解决?
,想在网上投简历,哪几个网站比较好?
建站之星3.0如何解决常见操作问题?
如何做网站制作流程,*游戏网站怎么搭建?
微信h5制作网站有哪些,免费微信H5页面制作工具?
电商网站制作价格怎么算,网上拍卖流程以及规则?
山东云建站价格为何差异显著?
如何续费美橙建站之星域名及服务?
招商网站制作流程,网站招商广告语?
装修招标网站设计制作流程,装修招标流程?
山东网站制作公司有哪些,山东大源集团官网?
如何通过建站之星自助学习解决操作问题?
如何在阿里云高效完成企业建站全流程?
制作电商网页,电商供应链怎么做?
制作网站的公司有哪些,做一个公司网站要多少钱?
宿州网站制作公司兴策,安徽省低保查询网站?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
详解jQuery停止动画——stop()方法的使用
如何快速搭建虚拟主机网站?新手必看指南
网站网页制作专业公司,怎样制作自己的网页?
建站10G流量真的够用吗?如何应对访问高峰?
北京企业网站设计制作公司,北京铁路集团官方网站?
东莞专业制作网站的公司,东莞大学生网的网址是什么?
如何高效搭建专业期货交易平台网站?
如何注册花生壳免费域名并搭建个人网站?
建站之星图片链接生成指南:自助建站与智能设计教程
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
如何获取PHP WAP自助建站系统源码?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?
测试制作网站有哪些,测试性取向的权威测试或者网站?
Thinkphp 中 distinct 的用法解析
手机网站制作与建设方案,手机网站如何建设?
网站制作难吗安全吗,做一个网站需要多久时间?
招贴海报怎么做,什么是海报招贴?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
如何选择高效可靠的多用户建站源码资源?
内部网站制作流程,如何建立公司内部网站?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
,柠檬视频怎样兑换vip?
行程制作网站有哪些,第三方机票电子行程单怎么开?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
建站VPS能否同时实现高效与安全翻墙?
,有什么在线背英语单词效率比较高的网站?
打鱼网站制作软件,波克捕鱼官方号怎么注册?
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
如何通过免费商城建站系统源码自定义网站主题与功能?
*请认真填写需求信息,我们会在24小时内与您取得联系。