将一个流程进行分解,让这个流程在多个对象中进行传递,由最后一个对象完成这个流程。通过职责链模式能够将流程进行分解,从而解耦。

就是用来处理相关事务责任的一条执行链,执行链上有多个节点,每个节点都

有机会(条件匹配)处理请求事务,如果某个节点处理完了就可以根据实际业务需求传递给下一个节点继续处理或者返回处理完毕。

补充

补充:责任链模式(Chain of Responsibility)的核心思想:将多个处理者连成一条链,请求沿链传递,直到有处理者"接管"它。优点是解耦请求与处理,方便动态增删节点;常见场景:中间件机制(Express / Koa)、审批流、多级异常捕获。

两种实现风格:

  • 链表式:每个节点持有 next 指针,调用方拿到首节点后逐级向下传递;
  • 数组式:把所有处理函数放进数组,遍历调用直到某个函数返回 true / 非 undefined。
// 数组式:Express 中间件风格
function applyMiddlewares(ctx, middlewares) {
  let i = 0
  const next = () => middlewares[i++]?.(ctx, next)
  next()
}

const middlewares = [
  (ctx, next) => { ctx.a = 1; next() },
  (ctx, next) => { ctx.b = 2; next() },
  (ctx) => { console.log(ctx) }, // { a:1, b:2 }
]
applyMiddlewares({}, middlewares)

来源整理自:vue3js.cn 面试官系列