⛓️
一句话理解:责任链让请求依次经过多个处理器,每个处理器决定处理、修改、终止或继续传递请求。

它解决什么问题

伤害结算可能依次经过无敌检查、护盾吸收、护甲减免和生命值扣除。把所有规则写在一个方法里会难以扩展;让调用方逐个调用又会暴露顺序。责任链把管线本身封装起来。

C# 示例:伤害管线

构建链时顺序是业务规则的一部分:

两种链语义

  • 首个处理者结束:常用于输入路由、权限审批。
  • 管线式全部处理:每个处理器修改请求,除非显式短路。
必须在接口层明确采用哪一种,避免调用方误解。

适用场景

输入分发、伤害计算、验证规则、日志管线、UI 事件冒泡和 AI 决策过滤。

风险

处理顺序隐蔽会导致难查问题。建议给处理器命名、记录链路,并用测试覆盖顺序和短路行为。链过长或每个节点都修改共享上下文时,可考虑更显式的管线配置。

小结

责任链把“谁处理请求”从发送者手中移走。它换来动态组合能力,也要求你把顺序、终止条件和诊断信息设计清楚。