一句话理解:责任链让请求依次经过多个处理器,每个处理器决定处理、修改、终止或继续传递请求。
它解决什么问题
伤害结算可能依次经过无敌检查、护盾吸收、护甲减免和生命值扣除。把所有规则写在一个方法里会难以扩展;让调用方逐个调用又会暴露顺序。责任链把管线本身封装起来。
C# 示例:伤害管线
构建链时顺序是业务规则的一部分:
两种链语义
- 首个处理者结束:常用于输入路由、权限审批。
- 管线式全部处理:每个处理器修改请求,除非显式短路。
必须在接口层明确采用哪一种,避免调用方误解。
适用场景
输入分发、伤害计算、验证规则、日志管线、UI 事件冒泡和 AI 决策过滤。
风险
处理顺序隐蔽会导致难查问题。建议给处理器命名、记录链路,并用测试覆盖顺序和短路行为。链过长或每个节点都修改共享上下文时,可考虑更显式的管线配置。
小结
责任链把“谁处理请求”从发送者手中移走。它换来动态组合能力,也要求你把顺序、终止条件和诊断信息设计清楚。