当前位置: 首页 > news >正文

go: Reactor Pattern

项目结构:

image

 

/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Reactor  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/16 20:22
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : common.go
*/
package commonimport ("log""os"
)// 业务事件类型枚举
type BusinessEventType stringconst (RAW_MATERIAL      BusinessEventType = "raw_material"PROCESS_CHECK     BusinessEventType = "process_check"STORE_SALE        BusinessEventType = "sale"AFTER_SALE_REPAIR BusinessEventType = "repair"INVENTORY_CHECK   BusinessEventType = "inventory"
)// 统一日志
func GetReactorLogger(name string) *log.Logger {return log.New(os.Stdout, "["+name+"] ", log.Ldate|log.Ltime)
}/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Reactor  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/16 20:22
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : event.go
*/
package eventimport "godesginpattern/reactor/common"// 业务事件实体(对齐 Python dataclass)
type BusinessEvent struct {EventType common.BusinessEventTypePayload   map[string]interface{}
}/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Reactor  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/16 20:23
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : handler.go
*/
package handlerimport ("godesginpattern/reactor/common""godesginpattern/reactor/event"
)var logger = common.GetReactorLogger("handler")// 原料采购
type MaterialHandler struct{}func (h *MaterialHandler) Handle(e event.BusinessEvent) {p := e.Payloadlogger.Printf("【原料采购验收】原料:%s | 纯度:%s | 重量:%vg",p["material_type"], p["purity"], p["weight"])logger.Printf("%s 原料验收合格,入库完成!", p["material_type"])
}// 加工质检
type ProcessHandler struct{}func (h *ProcessHandler) Handle(e event.BusinessEvent) {p := e.Payloadlogger.Printf("【珠宝加工质检】款式:%s | 证书:%s | 工艺:%s",p["style"], p["cert_no"], p["craft"])logger.Printf("%s 工艺合格,证书合规,成品入库!", p["style"])
}// 销售结算
type SaleHandler struct{}func (h *SaleHandler) Handle(e event.BusinessEvent) {p := e.Payloadprice := p["unit_price"].(int)qty := p["quantity"].(int)total := price * qtylogger.Printf("【门店销售结算】商品:%s | 单价:%v元 | 数量:%v件",p["product_name"], price, qty)logger.Printf("订单%s 结算总价:%v元,销售完成!", p["order_id"], total)
}// 售后维修
type RepairHandler struct{}func (h *RepairHandler) Handle(e event.BusinessEvent) {p := e.Payloadlogger.Printf("【售后维修】客户:%s | 饰品:%s | 项目:%s",p["customer_name"], p["jewelry_name"], p["repair_item"])logger.Printf("%s 完成,可领取珠宝!", p["repair_item"])
}// 库存盘点
type InventoryHandler struct{}func (h *InventoryHandler) Handle(e event.BusinessEvent) {p := e.Payloadlogger.Printf("【库存盘点】类型:%s | 总数:%v | 总价值:%v万元",p["inventory_type"], p["total_num"], p["total_value"])logger.Println("盘点结果:账实相符,库存更新完成!")
}/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Reactor  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/16 20:24
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : reactor.go
*/
package reactorsimport ("godesginpattern/reactor/common""godesginpattern/reactor/event""godesginpattern/reactor/handler"
)// 事件分离器 Demultiplexer
type EventDemultiplexer struct {handlerMap map[common.BusinessEventType]interface{ Handle(e event.BusinessEvent) }
}func NewDemux() *EventDemultiplexer {return &EventDemultiplexer{handlerMap: make(map[common.BusinessEventType]interface{ Handle(e event.BusinessEvent) }),}
}
func (d *EventDemultiplexer) Register(t common.BusinessEventType, h interface{ Handle(e event.BusinessEvent) }) {d.handlerMap[t] = h
}
func (d *EventDemultiplexer) Get(t common.BusinessEventType) interface{ Handle(e event.BusinessEvent) } {return d.handlerMap[t]
}// Reactor 核心
type JewelryReactor struct {demux *EventDemultiplexer
}func NewJewelryReactor() *JewelryReactor {demux := NewDemux()demux.Register(common.RAW_MATERIAL, &handler.MaterialHandler{})demux.Register(common.PROCESS_CHECK, &handler.ProcessHandler{})demux.Register(common.STORE_SALE, &handler.SaleHandler{})demux.Register(common.AFTER_SALE_REPAIR, &handler.RepairHandler{})demux.Register(common.INVENTORY_CHECK, &handler.InventoryHandler{})return &JewelryReactor{demux: demux}
}func (r *JewelryReactor) Dispatch(e event.BusinessEvent) {h := r.demux.Get(e.EventType)if h != nil {h.Handle(e)}
}

  

调用:

/*
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:
# 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/16 20:25
# User      :  geovindu
# Product   : GoLand
# Project   : godesginpattern
# File      : reactorbll.go
*/
package bllimport ("godesginpattern/reactor/common""godesginpattern/reactor/event""godesginpattern/reactor/reactors"
)var reactorlogger = common.GetReactorLogger("ReactorBll")// ReactorBll 你要的封装类
type ReactorBll struct {reactor *reactors.JewelryReactor
}func NewReactorBll() *ReactorBll {return &ReactorBll{reactor: reactors.NewJewelryReactor(),}
}func ReactorMain(b *ReactorBll) {reactorlogger.Println("========== ReactorBll demo 开始 ==========")events := []event.BusinessEvent{{EventType: common.RAW_MATERIAL,Payload: map[string]interface{}{"material_type": "足金999","purity":        "99.9%","weight":        800,},},{EventType: common.PROCESS_CHECK,Payload: map[string]interface{}{"style":   "1克拉钻戒","cert_no": "GIA987654321","craft":   "微镶精工",},},{EventType: common.STORE_SALE,Payload: map[string]interface{}{"product_name": "古法金镯","unit_price":   15680,"quantity":     1,"order_id":     "JEW20260615001",},},{EventType: common.AFTER_SALE_REPAIR,Payload: map[string]interface{}{"customer_name": "李女士","jewelry_name":  "18K金项链","repair_item":   "焊接+抛光",},},{EventType: common.INVENTORY_CHECK,Payload: map[string]interface{}{"inventory_type": "钻石成品","total_num":      1680,"total_value":    12600,},},}for _, evt := range events {b.reactor.Dispatch(evt)}reactorlogger.Println("========== ReactorBll demo 结束 ==========")
}

  

输出:

image

 

http://www.rkmt.cn/news/1537422.html

相关文章:

  • 如何用25美元打造AI智能眼镜:开源方案OpenGlass实战指南
  • ESP32数控系统:开源运动控制架构的5大创新突破
  • Obsidian Outliner拖拽指南:3步掌握高效列表重组的秘诀
  • B站成分检测器:让评论区用户身份一目了然的智能分析工具
  • 东营润美22年源头工厂,抗风防腐配本地售后 - 资讯纵览
  • HackMyVM-chromatica
  • NSK SFT3210-2.5 滚珠丝杠技术详解
  • 2026 济南环氧固化地坪施工厂家测评榜:老牌直营厂家自有施工队,包工包料缩短施工周期 - 资讯纵览
  • 为什么e5-small-openmind是语义相似性任务的终极选择?实测对比10种主流模型
  • 安徽高考数学 2015-2026
  • 植筋胶厂家预约核心考察维度:华东工程工期与交付适配指南 - 资讯纵览
  • 沈阳智能工厂申报服务机构排行 专业合规服务方客观盘点 - 互联网科技品牌测评
  • 2026年郑州复印机打印机租赁靠谱服务商参考名录 - 资讯纵览
  • 终极Nexe指南:如何将Node.js应用打包为独立可执行文件(2025最新版)
  • 2026年佛山公寓购买排行盘点 多维度适配需求参考 - 互联网科技品牌测评
  • 终极指南:5步掌握Intel RealSense SDK的3D视觉应用开发
  • FigmaCN:为中文设计师打造的专业级界面本地化方案
  • 武汉名包回收测评|实测五家机构,你的闲置包包该去哪卖? - 奢侈品回收测评
  • 2026地毯推荐:无胶技术引领健康家居新趋势 - 资讯纵览
  • 升降压型LED驱动芯片PW6300采用电流模闭环控制
  • 沈阳知识产权代理机构排行:基于公开服务维度客观梳理 - 互联网科技品牌测评
  • 2026 成都名牌首饰回收行业白皮书:主流线下门店盘点,全流程交易套路拆解 - 禹竞
  • 2026上半年防排烟玻璃棉厂家哪家专业选择攻略 - 资讯纵览
  • PIC18单片机MSSP模块驱动SPI EEPROM:C18环境下的硬件接口与驱动设计
  • 2026石家庄艺考生文化课热门机构大盘点 - 资讯纵览
  • 3分钟掌握FunClip:零门槛AI视频剪辑神器,快速提取精彩片段
  • 嵌入式系统复位管理:PXD20 MC_RGM模块配置与高可靠性设计实践
  • 2026阳江注册公司代办机构甄选|四大高口碑靠谱机构实力测评 - 资讯纵览
  • 3分钟掌握Gofile批量下载:终极自动化解决方案
  • 深入解析OSEK/VDX RTOS三大核心机制:资源管理、计数器与报警器、事件管理