news 2026/4/27 3:42:19

go: Chain of Responsibility Pattern

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
go: Chain of Responsibility Pattern

项目结构:

/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Chain of Responsibility 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/4/21 20:48 # User : geovindu # Product : GoLand # Project : godesginpattern # File : repair.go */ package domain // 维修类型常量(严格定义业务等级) const ( RepairTypeSimple = "简单维修" // 初级技师 RepairTypeComplex = "复杂维修" // 高级技师 RepairTypeMajor = "重大维修" // 维修主管 ) // RepairRequest 维修请求实体(企业级标准:字段完整、不可变) type RepairRequest struct { CustomerName string // 客户姓名 RepairType string // 维修类型 Content string // 维修详情 }
/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Chain of Responsibility 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/4/21 20:48 # User : geovindu # Product : GoLand # Project : godesginpattern # File : base.go */ package handler import "godesginpattern/chain/domain" // RepairHandler 责任链核心接口(企业级标准:契约定义) type RepairHandler interface { SetNext(handler RepairHandler) RepairHandler HandleRequest(req *domain.RepairRequest) bool } // BaseRepairHandler 基础处理者(封装Next指针,所有处理者继承) type BaseRepairHandler struct { next RepairHandler } // SetNext 链式设置下一级处理者 func (b *BaseRepairHandler) SetNext(handler RepairHandler) RepairHandler { b.next = handler return handler } // nextHandle 公共方法:传递给下一级处理 func (b *BaseRepairHandler) nextHandle(req *domain.RepairRequest) bool { if b.next != nil { return b.next.HandleRequest(req) } return false } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Chain of Responsibility 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/4/21 20:49 # User : geovindu # Product : GoLand # Project : godesginpattern # File : junior.go */ package handler import ( "fmt" "godesginpattern/chain/domain" ) // JuniorTechnician 初级珠宝技师:仅处理简单维修 type JuniorTechnician struct { BaseRepairHandler } func (j *JuniorTechnician) HandleRequest(req *domain.RepairRequest) bool { if req.RepairType == domain.RepairTypeSimple { fmt.Printf("【初级技师】处理客户%s的请求:%s(维修内容:%s)✅\n", req.CustomerName, req.RepairType, req.Content) return true } // 无法处理,交给下一级 return j.nextHandle(req) } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Chain of Responsibility 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/4/21 20:49 # User : geovindu # Product : GoLand # Project : godesginpattern # File : senior.go */ package handler import ( "fmt" "godesginpattern/chain/domain" ) // SeniorTechnician 高级珠宝技师:仅处理复杂维修 type SeniorTechnician struct { BaseRepairHandler } func (s *SeniorTechnician) HandleRequest(req *domain.RepairRequest) bool { if req.RepairType == domain.RepairTypeComplex { fmt.Printf("【高级技师】处理客户%s的请求:%s(维修内容:%s)✅\n", req.CustomerName, req.RepairType, req.Content) return true } return s.nextHandle(req) } /* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Chain of Responsibility 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/4/21 20:49 # User : geovindu # Product : GoLand # Project : godesginpattern # File : supervisor.go */ package handler import ( "fmt" "godesginpattern/chain/domain" ) // RepairSupervisor 维修主管:仅处理重大维修 type RepairSupervisor struct { BaseRepairHandler } func (r *RepairSupervisor) HandleRequest(req *domain.RepairRequest) bool { if req.RepairType == domain.RepairTypeMajor { fmt.Printf("【维修主管】处理客户%s的请求:%s(维修内容:%s)✅\n", req.CustomerName, req.RepairType, req.Content) return true } return r.nextHandle(req) }
/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Chain of Responsibility 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/4/21 20:49 # User : geovindu # Product : GoLand # Project : godesginpattern # File : repair_service.go */ package service import ( "fmt" "godesginpattern/chain/domain" "godesginpattern/chain/handler" ) // RepairService 维修服务(企业级:对外唯一入口) type RepairService struct { chainHandler handler.RepairHandler // 责任链入口 } // NewRepairService 创建服务(初始化责任链) func NewRepairService() *RepairService { // 1. 创建处理者 junior := &handler.JuniorTechnician{} senior := &handler.SeniorTechnician{} supervisor := &handler.RepairSupervisor{} // 2. 构建标准责任链:初级 → 高级 → 主管 junior.SetNext(senior).SetNext(supervisor) return &RepairService{ chainHandler: junior, } } // SubmitRepair 提交维修请求(对外服务方法) func (s *RepairService) SubmitRepair(req *domain.RepairRequest) { fmt.Println("===== 客户提交维修请求 =====") success := s.chainHandler.HandleRequest(req) if !success { fmt.Printf("❌ 无法处理客户%s的请求:%s(维修内容:%s)\n", req.CustomerName, req.RepairType, req.Content) } fmt.Println() }

调用::

/* # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Chain of Responsibility 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/4/21 20:51 # User : geovindu # Product : GoLand # Project : godesginpattern # File : chainbll.go Chain/ ├── domain/ # 领域实体层(核心数据模型) │ └── repair.go # 维修请求实体、常量定义 ├── handler/ # 责任链处理层(接口+实现) │ ├── base.go # 基础处理者(公共逻辑) │ ├── junior.go # 初级技师 │ ├── senior.go # 高级技师 │ └── supervisor.go# 维修主管 ├── service/ # 业务服务层(责任链构建+调度) │ └── repair_service.go ├── go.mod # Go 模块文件 └── main.go # 程序入口(测试用例) */ package bll import ( "godesginpattern/chain/domain" "godesginpattern/chain/service" ) func ChainMain() { // 初始化维修服务 repairService := service.NewRepairService() // 测试1:简单维修 req1 := &domain.RepairRequest{ CustomerName: "张先生", RepairType: domain.RepairTypeSimple, Content: "戒指清洗+抛光", } repairService.SubmitRepair(req1) // 测试2:复杂维修 req2 := &domain.RepairRequest{ CustomerName: "李女士", RepairType: domain.RepairTypeComplex, Content: "项链宝石松动加固", } repairService.SubmitRepair(req2) // 测试3:重大维修 req3 := &domain.RepairRequest{ CustomerName: "王先生", RepairType: domain.RepairTypeMajor, Content: "钻戒主石更换+戒托重构", } repairService.SubmitRepair(req3) // 测试4:无法处理的请求 req4 := &domain.RepairRequest{ CustomerName: "陈女士", RepairType: "古董珠宝修复", Content: "百年翡翠手镯断裂拼接", } repairService.SubmitRepair(req4) }

输出:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/27 3:39:20

天力监控看板:大宗材料与汇率波动的智慧管家

在复杂多变的市场环境中,大宗材料价格及汇率的波动直接影响着企业的成本控制和盈利能力。为了更好地应对这些挑战,JBoltAI团队为天力定制开发了一款大宗材料及汇率波动监控看板,为企业提供全面、实时、可追溯的数据监控与分析工具。一、总览看…

作者头像 李华
网站建设 2026/4/27 3:37:22

解锁微软VS Code扩展限制:在非官方编辑器中使用C#/C++扩展

1. 项目概述与背景 如果你是一名深度使用非官方 VS Code 分支(比如 Cursor、VSCodium、Code - OSS)的开发者,那么你很可能在尝试安装微软官方出品的 C# 或 C/C 扩展时,遇到过那个令人沮丧的弹窗:“The C/C extension …

作者头像 李华
网站建设 2026/4/27 3:34:19

通用Mapper + PageHelper:MyBatis分页插件终极实战教程

通用Mapper PageHelper:MyBatis分页插件终极实战教程 【免费下载链接】spring-boot-demo 🚀一个用来深入学习并实战 Spring Boot 的项目。 项目地址: https://gitcode.com/gh_mirrors/sp/spring-boot-demo 在Spring Boot开发中,MyBat…

作者头像 李华
网站建设 2026/4/27 3:32:41

医疗影像设备中的高精度ADC与信号处理技术

1. 医疗影像设备的数据转换与信号处理架构解析医疗影像设备的核心在于如何精确采集微弱的生物信号并将其转换为高质量的数字图像。以CT和MRI为代表的现代医疗影像系统,其信号链通常包含三个关键环节:前端传感器信号采集、中端数据转换与处理、后端图像重…

作者头像 李华
网站建设 2026/4/27 3:27:20

掌握Noto Emoji:构建跨平台表情符号的终极视觉工具箱

掌握Noto Emoji:构建跨平台表情符号的终极视觉工具箱 【免费下载链接】noto-emoji Noto Emoji fonts 项目地址: https://gitcode.com/gh_mirrors/no/noto-emoji 当你发送一个笑脸表情时,是否曾想过它如何在iPhone、Android和Windows电脑上保持完全…

作者头像 李华