网站首页 > java教程 正文
使用go语言实现代码责任链模式,代码如下:
/*
* 责任链代码示例,适用场景:下单操作
*/
package main
import (
"fmt"
"runtime"
)
type Context struct {
// ...
}
type Handler interface {
Do(c *Context) error
}
type NullHandler struct {
Tasks []Handler
}
func (h *NullHandler) Do(c *Context) (err error) {
return
}
type CurrencyGBTHandler struct{}
func (h *CurrencyGBTHandler) Do(c *Context) (err error) {
fmt.Println(runFuncName(), "积分处理...")
return
}
type CurrencyCNYHandler struct{}
func (h *CurrencyCNYHandler) Do(c *Context) (err error) {
fmt.Println(runFuncName(), "现金处理...")
return
}
type GoodsHandler struct{}
func (h *GoodsHandler) Do(c *Context) (err error) {
fmt.Println(runFuncName(), "商品处理...")
return
}
type ChannelHandler struct{}
func (h *ChannelHandler) Do(c *Context) (err error) {
fmt.Println(runFuncName(), "渠道处理...")
return
}
func runFuncName() string {
pc := make([]uintptr, 1)
runtime.Callers(2, pc)
f := runtime.FuncForPC(pc[0])
return f.Name()
}
/*
* go run .
* 输出:
* main.(*CurrencyGBTHandler).Do 积分处理...
* main.(*CurrencyCNYHandler).Do 现金处理...
* main.(*GoodsHandler).Do 商品处理...
* main.(*ChannelHandler).Do 渠道处理...
* Success
*/
func main() {
// NullHandler 结构体 有tasks slice 用来接收责任链中多个handler 处理者
// 多个handler都是struct 都实现了 Handler 接口中的方法 所以可以作为Handler 被tasks接收
nullHandler := &NullHandler{}
nullHandler.Tasks = []Handler{
&CurrencyGBTHandler{},
&CurrencyCNYHandler{},
&GoodsHandler{},
&ChannelHandler{},
}
c := &Context{}
for _, h := range nullHandler.Tasks {
// 执行每个task 的 Do() 方法
if err := h.Do(c); err != nil {
fmt.Println("Error: " + err.Error())
return
}
}
fmt.Println("Success")
}
猜你喜欢
- 2024-12-23 新疆军区某边防团河源边防连采访见闻
- 2024-12-23 还在自己实现责任链?我建议你造轮子之前先看看这个开源项目
- 2024-12-23 风雪边关!一起走近新疆军区某边防团河源边防连
- 2024-12-23 基于Sentinel自研组件的系统限流、降级、负载保护最佳实践探索
- 2024-12-23 入连!授枪! 授枪仪式上连长的讲话
- 2024-12-23 MapStruct架构设计 mapstruct-processor
- 2024-12-23 # 利刃出鞘_Tomcat 核心原理解析(三)
- 2024-12-23 责任链 + 工厂 + 模板方法 + 享元 模式结合业务 - 实践
- 2024-12-23 Spring 框架底层用到的设计模式都有哪些?
- 2024-12-23 聊聊如何实现一个特别的责任链 如何实现负责任创新
你 发表评论:
欢迎- 04-27微服务部署架构设计详解(图文全面总结)
- 04-27Java微服务架构选型与对比:一场技术流派的巅峰对决
- 04-27微服务架构下Java的最佳实践
- 04-27Java微服务架构选型:优雅拆分与高效整合
- 04-27微服务架构下的Java代码拆分策略:像拼图一样构建系统
- 04-27微服务架构下的Java最佳实践
- 04-27微服务架构下Java的挑战与机遇
- 04-27微服务架构下Java事务管理的艺术
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)