项目结构:
/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Broadcast Pattern 广播模式 # Author : geovindu,Geovin Du 涂聚文. # IDE : goLang 2024.3.6 go 26.2 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/6/8 22:25 # User : geovindu # Product : GoLand # Project : godesginpattern # File : model.go */ package message // JewelryMessage 珠宝行业标准广播消息 type JewelryMessage struct { Title string // 消息标题 Content string // 消息内容 Product string // 产品名称 Material string // 原料 Batch string // 批次 Standard string // 质检标准 WarehouseLocation string // 仓位 MarketingContent string // 营销内容 } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Broadcast Pattern 广播模式 # Author : geovindu,Geovin Du 涂聚文. # IDE : goLang 2024.3.6 go 26.2 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/6/8 22:26 # User : geovindu # Product : GoLand # Project : godesginpattern # File : errors.go */ package core import "errors" // 广播相关错误 var ( ErrSubscriberNil = errors.New("订阅者不能为空") ErrSubscriberDup = errors.New("订阅者已存在") ) /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Broadcast Pattern 广播模式 # Author : geovindu,Geovin Du 涂聚文. # IDE : goLang 2024.3.6 go 26.2 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/6/8 22:26 # User : geovindu # Product : GoLand # Project : godesginpattern # File : subscriber.go */ package iface import "godesginpattern/broadcast/message" // Subscriber 订阅者接口(所有业务系统必须实现) type Subscriber interface { Name() string // 系统名称 OnReceive(msg message.JewelryMessage) // 接收广播消息 } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Broadcast Pattern 广播模式 # Author : geovindu,Geovin Du 涂聚文. # IDE : goLang 2024.3.6 go 26.2 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/6/8 22:27 # User : geovindu # Product : GoLand # Project : godesginpattern # File : broadcast.go */ package core import ( "fmt" "godesginpattern/broadcast/iface" "godesginpattern/broadcast/message" "sync" ) // BroadcastEngine 广播引擎(单例) type BroadcastEngine struct { subscribers []iface.Subscriber lock sync.RWMutex // 线程安全 } var instance *BroadcastEngine var once sync.Once // NewBroadcastEngine 单例模式获取全局广播引擎 func NewBroadcastEngine() *BroadcastEngine { once.Do(func() { instance = &BroadcastEngine{ subscribers: make([]iface.Subscriber, 0), } }) return instance } // Subscribe 订阅广播 func (e *BroadcastEngine) Subscribe(sub iface.Subscriber) error { if sub == nil { return ErrSubscriberNil } e.lock.Lock() defer e.lock.Unlock() // 去重 for _, s := range e.subscribers { if s.Name() == sub.Name() { return ErrSubscriberDup } } e.subscribers = append(e.subscribers, sub) return nil } // Broadcast 向所有订阅者广播消息 func (e *BroadcastEngine) Broadcast(msg message.JewelryMessage) { e.lock.RLock() defer e.lock.RUnlock() fmt.Println("\n=============================================") fmt.Println("📢 广播引擎开始全局广播:", msg.Title) fmt.Println("📄 消息内容:", msg.Content) fmt.Println("=============================================\n") // 同步发送给所有订阅者 for _, sub := range e.subscribers { sub.OnReceive(msg) } }/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Broadcast Pattern 广播模式 # Author : geovindu,Geovin Du 涂聚文. # IDE : goLang 2024.3.6 go 26.2 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/6/8 22:27 # User : geovindu # Product : GoLand # Project : godesginpattern # File : procurement.go */ package business import ( "fmt" "godesginpattern/broadcast/message" ) // ProcurementSystem 原料采购系统 type ProcurementSystem struct{} func (p *ProcurementSystem) Name() string { return "原料采购系统" } func (p *ProcurementSystem) OnReceive(msg message.JewelryMessage) { fmt.Println("📦【", p.Name(), "】已同步原料溯源:", msg.Material) } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Broadcast Pattern 广播模式 # Author : geovindu,Geovin Du 涂聚文. # IDE : goLang 2024.3.6 go 26.2 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/6/8 22:28 # User : geovindu # Product : GoLand # Project : godesginpattern # File : production.go */ package business import ( "fmt" "godesginpattern/broadcast/message" ) // ProductionSystem 生产加工系统 type ProductionSystem struct{} func (p *ProductionSystem) Name() string { return "生产加工系统" } func (p *ProductionSystem) OnReceive(msg message.JewelryMessage) { fmt.Println("⚙️【", p.Name(), "】已排产:", msg.Product, " 批次 ", msg.Batch) } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Broadcast Pattern 广播模式 # Author : geovindu,Geovin Du 涂聚文. # IDE : goLang 2024.3.6 go 26.2 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/6/8 22:28 # User : geovindu # Product : GoLand # Project : godesginpattern # File : quality.go */ package business import ( "fmt" "godesginpattern/broadcast/message" ) // QCSystem 质量检测系统 type QCSystem struct{} func (q *QCSystem) Name() string { return "质量检测系统" } func (q *QCSystem) OnReceive(msg message.JewelryMessage) { fmt.Println("🔍【", q.Name(), "】已加载质检标准:", msg.Standard) } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Broadcast Pattern 广播模式 # Author : geovindu,Geovin Du 涂聚文. # IDE : goLang 2024.3.6 go 26.2 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/6/8 22:29 # User : geovindu # Product : GoLand # Project : godesginpattern # File : warehouse.go */ package business import ( "fmt" "godesginpattern/broadcast/message" ) // WarehouseSystem 仓储管理系统 type WarehouseSystem struct{} func (w *WarehouseSystem) Name() string { return "仓储管理系统" } func (w *WarehouseSystem) OnReceive(msg message.JewelryMessage) { fmt.Println("📦【", w.Name(), "】已预留仓位:", msg.WarehouseLocation) } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Broadcast Pattern 广播模式 # Author : geovindu,Geovin Du 涂聚文. # IDE : goLang 2024.3.6 go 26.2 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/6/8 22:29 # User : geovindu # Product : GoLand # Project : godesginpattern # File : sales.go */ package business import ( "fmt" "godesginpattern/broadcast/message" ) // StoreSalesSystem 全国门店销售系统 type StoreSalesSystem struct{} func (s *StoreSalesSystem) Name() string { return "全国门店销售系统" } func (s *StoreSalesSystem) OnReceive(msg message.JewelryMessage) { fmt.Println("🏬【", s.Name(), "】已上架新品:", msg.Product) } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Broadcast Pattern 广播模式 # Author : geovindu,Geovin Du 涂聚文. # IDE : goLang 2024.3.6 go 26.2 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/6/8 22:29 # User : geovindu # Product : GoLand # Project : godesginpattern # File : marketing.go */ package business import ( "fmt" "godesginpattern/broadcast/message" ) // MemberMarketingSystem 会员营销系统 type MemberMarketingSystem struct{} func (m *MemberMarketingSystem) Name() string { return "会员营销系统" } func (m *MemberMarketingSystem) OnReceive(msg message.JewelryMessage) { fmt.Println("🎯【", m.Name(), "】已推送:", msg.MarketingContent) }调用:
/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Broadcast Pattern 广播模式 # Author : geovindu,Geovin Du 涂聚文. # IDE : goLang 2024.3.6 go 26.2 # os : windows 10 # database : mysql 9.0 sql server 2019, postgreSQL 17.0 Oracle 21c Neo4j # Datetime : 2026/6/8 22:30 # User : geovindu # Product : GoLand # Project : godesginpattern # File : broadcastbll.go */ package bll import ( "fmt" "godesginpattern/broadcast/business" "godesginpattern/broadcast/core" "godesginpattern/broadcast/iface" "godesginpattern/broadcast/message" ) func BroadcastMain() { // 1. 获取全局单例广播引擎 engine := core.NewBroadcastEngine() // 2. 初始化所有珠宝业务系统 systems := []iface.Subscriber{ &business.ProcurementSystem{}, &business.ProductionSystem{}, &business.QCSystem{}, &business.WarehouseSystem{}, &business.StoreSalesSystem{}, &business.MemberMarketingSystem{}, } // 3. 订阅广播 for _, sys := range systems { if err := engine.Subscribe(sys); err != nil { fmt.Println("❌ 订阅失败:", sys.Name(), " 错误:", err.Error()) continue } fmt.Println("✅ 已订阅:", sys.Name()) } // 4. 构造标准广播消息 msg := message.JewelryMessage{ Title: "2025春季冰种翡翠手镯全国上市", Content: "天然A货翡翠,统一标准、统一定价、同步发售", Product: "冰种翡翠手镯", Material: "缅甸天然翡翠", Batch: "JC20250415-001", Standard: "GB/T 16552-2017 珠宝玉石鉴定", WarehouseLocation: "广州总部仓-A03-07", MarketingContent: "VIP会员专享9折+免费刻字", } // 5. 执行全局广播 engine.Broadcast(msg) fmt.Println("\n🎉 企业级广播完成:全业务链同步成功") }输出: