按时间顺序把大动作拆成小动作 <!-- more --> ## 关键词 我来整理一下责任链模式(Chain of Responsibility)相关的关键词和概念: | 分类 | 关键词 | 说明 | | ---- | ----------------- | -------------- | | 核心角色 | Handler | 处理器,定义处理请求的接口 | | | ConcreteHandler | 具体处理器,实际处理请求的类 | | | Request | 请求,需要被处理的信息或任务 | | | Client | 客户端,发起请求的对象 | | | Chain | 责任链,处理器的有序集合 | | 处理方法 | HandleRequest | 处理请求的方法 | | | SetNext | 设置下一个处理器 | | | GetNext | 获取下一个处理器 | | | Process | 处理请求的具体逻辑 | | | CanHandle | 判断是否能处理请求 | | 链式操作 | Forward | 转发请求到下一处理器 | | | Intercept | 拦截请求 | | | Filter | 过滤请求 | | | Break | 中断责任链 | | | Continue | 继续传递请求 | | 实现方式 | Pipeline | 管道模式实现 | | | Middleware | 中间件方式实现 | | | Filter Chain | 过滤器链实现 | | | Interceptor Chain | 拦截器链实现 | | 处理类型 | Synchronous | 同步处理 | | | Asynchronous | 异步处理 | | | Recursive | 递归处理 | | | Iterative | 迭代处理 | ## 需求 整个报价过程,要经历很多环节,都写在一起,岂不是要爆炸了! ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F05%2F09%2F21-48-45-8f2313fbae089bb1b882e75871de9640-20240509214844-c7379f.png) ## 实现 ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F05%2F09%2F21-51-28-339b3406f0649ea47fd0a305f432bf96-20240509215128-474c0b.png) 整个计算模块是一个 chain,由若干个 component 组成,传递 context 是为了共同关心的信息串联起来。 另外,整个后端项目中的鉴权、access 日志、参数校验、限流等也都是责任链上的一个 processor,HttpServletRequest 和 Response 就是 chain 中的 context。 web filter 作用于容器,应用范围影响最大;spring interceptor 作用于框架,范围影响适中;aop 作用于业务逻辑,精细化处理,范围影响最小。如果观察 spring 项目的方法栈的变化,开头结尾都是有共性的。 ![image.png|1000](https://imagehosting4picgo.oss-cn-beijing.aliyuncs.com/imagehosting/fix-dir%2Fpicgo%2Fpicgo-clipboard-images%2F2024%2F05%2F10%2F11-13-12-03d5f26d3ae720097008fe5b66d07805-20240510111310-7c0c77.png)