设计模式之责任链模式详解
创作时间:
作者:
@小白创作中心
设计模式之责任链模式详解
引用
1
来源
1.
https://www.cnblogs.com/jilodream/p/18374509
责任链模式是面向对象设计模式中的一种行为模式,通过将请求处理者串联成链表结构,实现请求的逐级处理。本文通过一个新员工入职流程的案例,详细介绍了责任链模式的核心思想、应用场景以及具体实现方法。
责任链模式简介
责任链模式(Chain of Responsibility),顾名思义,就是将每一个处理请求的处理器组合成一个链表,链表中的每个节点(执行器)都有机会处理发送的请求。其大致结构如下:
案例分析:新员工入职流程
假设某公司新员工入职流程分为三步:
- 签订劳动合同
- 员工信息入库
- 下发工卡
按照责任链模式设计,类图如下:
代码实现
处理器接口
package com.example.demo.learn.pattern.behavior.responsibilitychain;
public interface IHandler {
boolean handle(Employee employee);
}
合同处理器
package com.example.demo.learn.pattern.behavior.responsibilitychain;
public class CardHandler implements IHandler{
@Override
public boolean handle(Employee employee) {
System.out.println("制作工牌:工号"+employee.getId()+" 姓名:"+employee.getName());
return true;
}
}
协议处理器
package com.example.demo.learn.pattern.behavior.responsibilitychain;
public class ContractHandler implements IHandler {
@Override
public boolean handle(Employee employee) {
System.out.println("签订合同:" + employee);
return true;
}
}
系统流程处理器
package com.example.demo.learn.pattern.behavior.responsibilitychain;
import java.util.Date;
public class SystemHandler implements IHandler {
@Override
public boolean handle(Employee employee) {
long id = new Date().getTime();
employee.setId(id);
System.out.println("员工信息登入到系统中: " + employee);
return true;
}
}
员工类:业务实体
package com.example.demo.learn.pattern.behavior.responsibilitychain;
import lombok.Data;
@Data
public class Employee {
private Long id;
private String name;
}
主类:责任链的编排和请求调用
package com.example.demo.learn.pattern.behavior.responsibilitychain;
public class PatternMain {
public static void main(String[] args) {
ContractHandler contractHandler = new ContractHandler();
SystemHandler systemHandler = new SystemHandler();
CardHandler cardHandler = new CardHandler();
EntryChain entry = new EntryChain(contractHandler, systemHandler, cardHandler);
String name = "小z";
boolean result = entry.process(name);
if (result) {
System.out.println(name + "的入职流程已经处理完");
}
}
}
执行效果如下:
Connected to the target VM, address: '127.0.0.1:63269', transport: 'socket'
签订合同:Employee(id=null, name=小z)
员工信息入库: Employee(id=1724316937102, name=小z)
制作工牌:工号1724316937102 姓名:小z
小z的入职流程已经全部处理完
Disconnected from the target VM, address: '127.0.0.1:63269', transport: 'socket'
核心思路
- 定义一个接口规范每个执行器的执行方法(如IHandler接口)。
- 定义具体执行器实现类(如ContractHandler、SystemHandler等)。
- 使用链表编排执行器的执行顺序。
应用场景
- 流程编排(如电子流工单处理)
- 资源使用(申请、使用、释放资源)
- 日志记录、权限过滤、请求预处理(如AOP切面编程)
为什么使用责任链模式?
- 业务流程复杂且经常变动时,便于维护。
- 符合开闭原则,易于扩展和调整执行顺序。
变形与扩展
- 节点保存在每个责任链节点的next引用处,形成单链表结构。
- 可以中途结束返回,也可以依次执行每个节点。
- 大型流程可能跨多个服务,不仅仅是方法编排。
总结
设计模式重在理解核心思想,应根据实际场景灵活应用,而不是生搬硬套。责任链模式提供了一种灵活的流程处理方式,适用于需要动态调整处理顺序的场景。
热门推荐
巴旦木仁:从传统零食到创新水果,营养与美味的完美结合
年货节必备:巴旦木奶枣,一口满足!
巴旦木仁:健康零食界的扛把子
辽宁乐金建设:中药GMP车间设计的高效解决方案
香氛舒压,告别办公疲劳
跟着导游小安,1000元玩转西安4天3晚!
西安高性价比旅店推荐,打卡网红景点
三亚冲浪嘉年华:千人嗨翻大东海,冲浪教学体验全攻略
三亚三大必去景点全攻略:亚龙湾、天涯海角、南山文化旅游区
三亚冬季度假全攻略:亚龙湾、蜈支洲岛、南山文化旅游区必打卡
一文读懂胰腺炎:症状识别、饮食调整与治疗方案
权威发布:急性胰腺炎营养治疗全程指导
哪吒闹海:一个流传千年的文化密码
《哪吒之魔童闹海》:IMAX银幕上的特效盛宴
《哪吒闹海新传》登陆国家大剧院,创新演绎经典IP
安岳茗山寺:北宋摩崖造像的千年守护
安岳茗山寺:千年古刹里的宋代石刻艺术瑰宝
胰腺炎防治指南:从日常饮食到专业治疗
低脂高蛋白助康复,重症胰腺炎患者这样吃
2025年中国风电:新增装机将破百亿,低价竞争引行业反思
细节描写让小说更有感染力
雪粒粒教你零基础写小说:从构思到完稿的实用指南
寻味桂林菜
在外久了,最想念的还是这一口「桂林米粉」
人在广西天塌了:原来桂林米粉没有汤
新加坡免签时代来临!一文掌握签证办理与旅游攻略
新加坡免签政策详解及短期旅行攻略
新加坡免签时代来临!这份实用旅游攻略请收好
中年女神最爱听的四句话
高情商赞美女性,秒变社交达人